我无法在WPF中进行双向绑定(bind)工作。

我的应用程序主窗口中有一个字符串属性,该属性绑定(bind)到TextBox(我将模式设置为“TwoWay”)。

TextBox值的唯一更新时间是在窗口初始化时。

当我在TextBox中键入内容时,基础字符串属性值不会更改。

当字符串属性的值由外部源更改时(例如,Click上的事件仅重置了TextBox的值),更改不会传播到TextBox。

即使在这个几乎微不足道的示例中,我也必须执行哪些步骤才能使双向绑定(bind)正常工作?

最佳答案

很可能您正在尝试绑定(bind)到.net CLR属性而不是WPFDependencyProperty(除了其他功能之外,它还提供更改通知)。
对于普通的CLR属性,您需要实现INotifyPropertyChanged并在PropertyChanged的事件处理程序中的文本框上强制更新。

  • 因此,使具有属性的对象实现此接口(interface),并在属性 setter 中引发事件。 (所以现在我们有属性更改通知)
  • 确保将对象设置为UI元素/控件
  • 的DataContext属性

    当我开始学习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/

    10-12 04:09
    查看更多