gpt4 book ai didi

c# - 在不更新 UI 元素的代码中定义的 WPF 数据绑定(bind)问题

转载 作者:太空狗 更新时间:2023-10-29 18:13:00 25 4
gpt4 key购买 nike

我需要在代码中定义新的 UI 元素和数据绑定(bind),因为它们将在运行时后实现。这是我正在尝试做的事情的简化版本。

数据模型:

public class AddressBook : INotifyPropertyChanged
{
private int _houseNumber;
public int HouseNumber
{
get { return _houseNumber; }
set { _houseNumber = value; NotifyPropertyChanged("HouseNumber"); }
}

public event PropertyChangedEventHandler PropertyChanged;

protected void NotifyPropertyChanged(string sProp)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(sProp));
}
}
}

在代码中绑定(bind):

AddressBook book = new AddressBook();
book.HouseNumber = 123;
TextBlock tb = new TextBlock();
Binding bind = new Binding("HouseNumber");
bind.Source = book;
bind.Mode = BindingMode.OneWay;
tb.SetBinding(TextBlock.TextProperty, bind); // Text block displays "123"
myGrid.Children.Add(tb);
book.HouseNumber = 456; // Text block displays "123" but PropertyChanged event fires

首次绑定(bind)数据时,文本 block 会更新为正确的门牌号。然后,如果我稍后在代码中更改门牌号,本书的 PropertyChanged 事件会触发,但文本 block 不会更新。谁能告诉我为什么?

谢谢,本

最佳答案

其根源是我传递给 PropertyChangedEventArgs 的字符串与属性名称不完全匹配。我有这样的事情:

public int HouseNumber
{
get { return _houseNumber; }
set { _houseNumber = value; NotifyPropertyChanged("HouseNum"); }
}

应该是这样的:

public int HouseNumber
{
get { return _houseNumber; }
set { _houseNumber = value; NotifyPropertyChanged("HouseNumber"); }
}

哎呀!感谢您朝着正确的方向插入。

关于c# - 在不更新 UI 元素的代码中定义的 WPF 数据绑定(bind)问题,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/406526/

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