gpt4 book ai didi

wpf - WPF 中的双向绑定(bind)

转载 作者:行者123 更新时间:2023-12-03 03:30:13 24 4
gpt4 key购买 nike

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

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

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

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

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

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

最佳答案

很可能您正在尝试绑定(bind)到 .net CLR 属性,而不是 WPF dependencyProperty(除了其他一些功能之外,它还提供更改通知)。
对于普通的 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/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com