2010-02-04 10 views
2
<ComboBox Height="23" Margin="52,64,33,0" Name="comboBox1" 
       IsSynchronizedWithCurrentItem="True" 
       IsEditable="True" 
       DisplayMemberPath="Value" 
       SelectedItem="{Binding Path=Number, Mode=TwoWay}" 
       /> 

public class Number : INotifyPropertyChanged 
    { 
     private string value; 
     public string Value 
     { 
      get 
      { 
       return value; 
      } 
     set 
     { 
      this.value = value; 
      this.PropertyChanged(this, new PropertyChangedEventArgs("Value")); 
     } 
    } 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged = delegate { }; 

    #endregion 
} 

comboBox1.ItemsSource = new Number[] { new Number() { Value = "One" }, 
                new Number() { Value = "Two" }, 
                new Number() { Value = "Three" }}; 

Mon jeu de données lié ne modifie pas lorsque j'édite du texte de liste déroulante. c.-à-d., La liaison cible à la source ne se produit pas.Liaison de données bidirectionnelle WPF - ComboBox modifiable vers un DataView

Répondre

1

ajouter à ce Josh .... conseille d'abord, vous devriez penser à utiliser un nom de variable diff alors « valeur »,
secondes, vous ne devriez pas déclencher l'événement « PropertyChanged » si la valeur ne change pas.

ajouter à l'setter de propriété ....

if (value != this.value) 
{ 

} 

troisième, vous n'êtes pas se lier à une instance de vos données, votre liant à votre type de classe

SelectedItem="{Binding Path=Number, Mode=TwoWay}" 

quatrième, vous devriez Définir le ItemSource dans votre combobox à ObservableCollection<Number>

Enfin, vous devriez vérifier Bea's great blog entry about debugging databinding. Elle a beaucoup d'excellents exemples.

ok, alors maintenant que j'ai accès à mon compilateur .... voici ce que vous devez faire.
Tout d'abord, où se trouve la propriété "Number" à laquelle vous vous liez? vous ne pouvez pas vous lier à la liste qui est la source de votre liste déroulante.

Vous devez ajouter un élément ElementName à la liaison, ou définir le DataContext à l'objet qui contient la propriété Number. Deuxièmement, cette propriété Number, où qu'elle soit, doit être soit Notify soit DependencyProperty.
par exemple, votre classe Window ressemblerait à ceci .....

public partial class Window1 : Window 
    { 
     public Number Number 
     { 
     get { return (Number)GetValue(ValueProperty); } 
     set { SetValue(ValueProperty, value); } 
     } 

     public static readonly DependencyProperty ValueProperty = DependencyProperty.Register("Value", typeof(Number),typeof(Window1), new UIPropertyMetadata(null)); 

    } 

et votre window.xaml ressemblerait à ceci ...

<Window x:Class="testapp.Window1" 
      x:Name="stuff" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="Window1" Height="300" Width="300"> 
    <Grid> 
     <ComboBox Height="23" Margin="52,64,33,0" Name="comboBox1" 
       IsEditable="True" 
       DisplayMemberPath="Value" 
       SelectedItem="{Binding ElementName=stuff, Path=Number, Mode=TwoWay}" 
     /> 
    </Grid> 
</Window> 
+0

J'ai essayé de se lier à la propriété SelectedItem. Mais lorsque je définis la propriété Text de la zone de liste déroulante, la propriété SelectedItem devient null. – Subindev

+0

IsTextSearchEnabled = "True" a provoqué l'annulation de la propriété SelctedItem à chaque fois que j'ai essayé de définir la propriété Text. TextSearchEnabled = "False" n'a montré aucun problème avec la liaison à 2 voies au texte à la liaison de propriété selecteditem .. :-) – Subindev