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" }};

当我编辑组合框文本时,我的绑定数据集没有修改。即,目标到源的绑定没有发生。

4

1 回答 1

1

添加到Josh的建议......首先,您应该考虑使用 diff 变量名称,然后是“值”,
其次,如果值没有改变,则不应触发“PropertyChanged”事件。

将此添加到属性设置器....

if ( value != this.value )
{

}

第三,你没有绑定到你的数据实例,你绑定到你的类类型

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

第四,您应该将组合框中的 ItemSource 设置为ObservableCollection< Number >

最后,您应该查看Bea 关于调试数据绑定的精彩博客文章。她有很多很好的例子。

好的,所以现在我可以访问我的编译器了……这就是你需要做的。
首先,您要绑定的“数字”属性在哪里?您不能绑定回作为组合框来源的列表。

您需要将 ElementName 添加到绑定,或将 DataContext 设置为包含 Number 属性的对象。其次,该 Number 属性,无论它在哪里,都需要是 Notify 或 DependencyProperty。
例如,您的 Window 类看起来像这样.....

   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));

   }

你的 window.xaml 看起来像这样......

<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>
于 2010-02-04T07:00:15.090 回答