<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" }};
我正在编辑组合框文本时,我的绑定数据集未修改。 即,没有发生源到绑定的目标。
答案 0 :(得分:1)
添加Josh建议.... 首先,你应该考虑使用diff变量名称然后“value”,第二,如果值没有改变,你不应该触发“PropertyChanged”事件。
将其添加到属性setter ....
if ( value != this.value )
{
}
第三,你没有绑定到你的数据实例,你绑定到你的类类型
SelectedItem="{Binding Path=Number, Mode=TwoWay}"
第四,你应该将你的组合框中的ItemSource设置为ObservableCollection< Number >
最后,你应该看看Bea's great blog entry about debugging databinding.她有很多很好的例子。
好的,现在我可以访问我的编译器....这是你需要做的 首先,WHERE是您绑定的“Number”属性?你无法绑定回作为你的组合框源的列表。您需要向绑定添加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>