gpt4 book ai didi

wpf - 帮助进行一些非常基本的 WPF 数据绑定(bind)

转载 作者:行者123 更新时间:2023-12-04 19:08:25 24 4
gpt4 key购买 nike

我是 WPF 的新手,正在尝试一个简单的数据绑定(bind)示例,但它不起作用。我的窗口有一个 TextBlock,我将其绑定(bind)到窗口对象的一个​​属性。我在代码中声明了该属性。

运行它时,我看到正确的值出现在 TextBlock 中。还有一个按钮,单击该按钮会更新属性,但我认为这不会影响 TextBlock。

据我所知,我正确地实现了 INotifyPropertyChanged。我还看到,在调试时,某物 订阅了 PropertyChanged 事件,但它似乎什么也没做。

我有两个问题:

1) 为什么没有按预期工作?

2) 有没有什么简单的方法可以在运行时调试导致这种情况的原因,而无需借助第三方工具?据我粗略的了解,在我看来,WPF 中的调试支持非常缺乏。

XAML 是(不包括“标准”XAML 窗口元素):

<TextBlock Height="28" Name="label1" VerticalAlignment="Top"
Text="{Binding Path=TheName}"
Grid.Row="0"
></TextBlock>
<Button Height="23" Name="button1" VerticalAlignment="Stretch" Grid.Row="1"
Click="button1_Click">
Button
</Button>

窗口类中的代码是:

    public partial class Window1 : Window
{
protected MyDataSource TheSource { get; set; }

public Window1()
{
InitializeComponent();
TheSource = new MyDataSource();
TheSource.TheName = "Original"; // This works
this.label1.DataContext = this.TheSource;
}

private void button1_Click(object sender, RoutedEventArgs e)
{
TheSource.TheName = "Changed"; // This doesn't work
}
}
public class MyDataSource : INotifyPropertyChanged
{
string thename;
public string TheName
{
get { return thename; }
set { thename = value; OnPropertyChanged(thename); }
}
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string name)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(name));
}
}
}
}

最佳答案

问题出在您的“TheName”属性 setter 中。 OnPropertyChanged 方法调用传递的是“thename”的,而不是“thename”的“名称”。 (很抱歉,如果这没有意义 - 示例中使用的变量名称密谋反对我们!)

正确的代码是:

string thename;
public string TheName
{
get { return thename; }
set { thename = value; OnPropertyChanged("TheName"); }
}

Here是来自 MSDN 的示例.

希望这对您有所帮助!

关于wpf - 帮助进行一些非常基本的 WPF 数据绑定(bind),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/872811/

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