项值不会在设置了数据模板的绑定 WPF 列表框中更新
本文关键字:WPF 绑定 列表 更新 设置 数据 | 更新日期: 2023-09-27 17:55:57
似乎我对绑定做了一些痛苦的事情,但是经过大量的尝试和研究,我仍然没有找到原因(我找到的所有示例都与我的实现非常相似,以至于我看不出我做错了什么),你能帮我吗?
我有一个名为 GlobalConfig
的类,它实现了INotifyPropertyChanged
并具有一个名为 Name 的属性。
public class GlobalConfig : XmlSoftLinkSerializer, INotifyPropertyChanged
{
private string _name;
public string Name
{
get { return _name; }
set
{
if (_name != value && PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
_name = value;
}
}
ObservableCollection<GlobalConfig>
绑定到ListBox
(通过设置列表框的 DataContext
属性),我有 ListBox 的以下数据模板:
<DataTemplate>
<TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
我还有一个名为 GlobalConfigUI
的用户控件,它绑定到列表框的DataContext
(使用 ElementName)。
这里一切正常,但是当我更改配置的名称时,列表框中没有任何变化......我检查了一下,我知道调用了 Name setter 中的 PropertyChanged
处理程序,对象GlobalConfig
也更新了,但列表框仍然显示旧名称......
以下是GlobalConfigUI
如何绑定到列表框的数据上下文:
<my:GlobalConfigUI x:Name="globalConfigUI1" DataContext="{Binding ElementName=settingsListBox, Path=SelectedValue, Mode=TwoWay}" />
下面是全局配置UI控件中的文本框如何绑定到名称属性:
<TextBox Name="configNameTextBox" Text="{Binding Path=Name, Mode=TwoWay, BindsDirectlyToSource=True}" MinWidth="380" />
我对 WPF 并不完全陌生,但我只使用了 2 或 3 次,所以我认为这里一定有某种新手错误,有什么提示吗?
首先,通过添加 UpdateSourceTrigger=PropertyChanged
来更改TextBox
绑定。还有关于BindsDirectlyToSource
,我很少使用它。将其删除并再次检查
此外,将实现更改为
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
if (_name != value && PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs("Name"));
}
}