项值不会在设置了数据模板的绑定 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 次,所以我认为这里一定有某种新手错误,有什么提示吗?

项值不会在设置了数据模板的绑定 WPF 列表框中更新

首先,通过添加 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"));
    } 
}