在设置了datatemplate的绑定wpf列表框中,项值不会更新

时间:2013-01-24 17:38:40

标签: c# wpf binding user-controls listbox

似乎我做了一些与绑定相关的事情,但经过大量尝试和研究后我仍然没有找到原因(我发现的所有例子都与我的实现非常相似,我看不到我做了什么错了),你能帮帮我吗?

我有一个名为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:

<DataTemplate>
     <TextBlock Text="{Binding Path=Name, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>

我还有一个名为GlobalConfigUI的用户控件,它绑定到列表框的DataContext(使用ElementName)。

这里的一切正常,但是当我更改配置的名称时,列表框中没有任何变化...... 我检查过,我知道名字设置器中的PropertyChanged处理程序被调用,对象GlobalConfig也被更新,但列表框仍然显示旧名称......

这里是GlobalConfigUI如何绑定到列表框的DataContext:

<my:GlobalConfigUI x:Name="globalConfigUI1" DataContext="{Binding ElementName=settingsListBox, Path=SelectedValue, Mode=TwoWay}" />

以下是GlobalConfigUI控件中的TextBox如何绑定到Name属性:

<TextBox Name="configNameTextBox" Text="{Binding Path=Name, Mode=TwoWay, BindsDirectlyToSource=True}" MinWidth="380" />

我不是WPF的新手,但我只使用了2到3次,所以我觉得这里肯定会有某种新的错误,有什么提示吗?

1 个答案:

答案 0 :(得分:1)

首先,请添加TextBox来更改UpdateSourceTrigger=PropertyChanged绑定。关于BindsDirectlyToSource,我很少使用它。将其删除并再次检查

此外,将您的实施更改为

private string _name;
public string Name 
{ 
    get { return _name; } 
    set 
    {
        _name = value;
        if (_name != value && PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs("Name"));

    } 
}