似乎我对绑定做了一些扭曲,但经过大量尝试和研究后,我仍然没有找到原因(我发现的所有示例都与我的实现非常相似,以至于我看不出我做错了什么),你能帮我吗?
我有一个名为的类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
列表框的属性),我有这个列表框的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 次,所以我认为这里一定有某种新手错误,有什么提示吗?