似乎我做了一些与绑定相关的事情,但经过大量尝试和研究后我仍然没有找到原因(我发现的所有例子都与我的实现非常相似,我看不到我做了什么错了),你能帮帮我吗?
我有一个名为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次,所以我觉得这里肯定会有某种新的错误,有什么提示吗?
答案 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"));
}
}