我无法在WPF中进行双向绑定(bind)工作。
我的应用程序主窗口中有一个字符串属性,该属性绑定(bind)到TextBox(我将模式设置为“TwoWay”)。
TextBox值的唯一更新时间是在窗口初始化时。
当我在TextBox中键入内容时,基础字符串属性值不会更改。
当字符串属性的值由外部源更改时(例如,Click上的事件仅重置了TextBox的值),更改不会传播到TextBox。
即使在这个几乎微不足道的示例中,我也必须执行哪些步骤才能使双向绑定(bind)正常工作?
最佳答案
很可能您正在尝试绑定(bind)到.net CLR属性而不是WPFDependencyProperty(除了其他功能之外,它还提供更改通知)。
对于普通的CLR属性,您需要实现INotifyPropertyChanged并在PropertyChanged的事件处理程序中的文本框上强制更新。
当我开始学习WPF数据绑定(bind)时,这也使我失望。
更新:好吧,OP,如果我在错误的树上吠叫,那将是浪费时间。现在无论如何,因为您必须挖掘一点。.您会记住很长一段时间了。这是完善此答案的代码段。还发现更新文本框会在我退出时自动发生。.如果您的datacontext对象不是实现INotifyPropertyChanged的对象,则只需手动订阅事件并更新UI。
MyWindow.xaml
<Window x:Class="DataBinding.MyWindow" ...
Title="MyWindow" Height="300" Width="300">
<StackPanel x:Name="TopLevelContainer">
<TextBox x:Name="txtValue" Background="AliceBlue" Text="{Binding Path=MyDotNetProperty}" />
<TextBlock TextWrapping="Wrap">We're twin blue boxes bound to the same property.</TextBlock>
<TextBox x:Name="txtValue2" Background="AliceBlue" Text="{Binding Path=MyDotNetProperty}" />
</StackPanel>
</Window>
MyWindow.xaml.cs
public partial class MyWindow : Window, INotifyPropertyChanged
{
public MyWindow()
{
InitializeComponent();
this.MyDotNetProperty = "Go ahead. Change my value.";
TopLevelContainer.DataContext = this;
}
private string m_sValue;
public string MyDotNetProperty
{
get { return m_sValue; }
set
{
m_sValue = value;
if (null != this.PropertyChanged)
{
PropertyChanged(this, new PropertyChangedEventArgs("MyDotNetProperty"));
}
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
#endregion
}
关于wpf - WPF中的双向绑定(bind),我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/320028/