我无法让WPF中的双向绑定正常工作。
我在应用程序的主窗口中有一个字符串属性,它与TextBox绑定(我将模式设置为“TwoWay”)。
仅当窗口初始化时,TextBox的值才会更新。
当我在TextBox中输入时,底层字符串属性的值不会更改。
当字符串属性的值由外部源(例如单击事件,只是重置TextBox的值)更改时,更改不会传播到TextBox。
我必须实现哪些步骤才能使双向绑定在这个几乎微不足道的例子中正常工作?
我无法让WPF中的双向绑定正常工作。
我在应用程序的主窗口中有一个字符串属性,它与TextBox绑定(我将模式设置为“TwoWay”)。
仅当窗口初始化时,TextBox的值才会更新。
当我在TextBox中输入时,底层字符串属性的值不会更改。
当字符串属性的值由外部源(例如单击事件,只是重置TextBox的值)更改时,更改不会传播到TextBox。
我必须实现哪些步骤才能使双向绑定在这个几乎微不足道的例子中正常工作?
<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
}
请确保绑定指定为双向,当属性发生更改时,立即将其传输到持有属性。
<TextBox Text="{Binding TextBuffer,
UpdateSourceTrigger=PropertyChanged,
Mode=TwoWay}"/>
TextBox
输入控件的Text
属性绑定到字符串属性TextBuffer
,并以立即、PropertyChanged
和TwoWay
的方式发送更改。
UpdateSourceTrigger=PropertyChanged
才能使它起作用。 - Joel Brown