C# OnPropertyChanged不更新UI
该窗口包含一个ListBox和一个TextBlock,我的目的是在ListBox中的选择更改时更新TextBlock 我有这门课:C# OnPropertyChanged不更新UI,c#,wpf,mvvm,data-binding,listbox,C#,Wpf,Mvvm,Data Binding,Listbox,该窗口包含一个ListBox和一个TextBlock,我的目的是在ListBox中的选择更改时更新TextBlock 我有这门课: class ViewModelMain : ViewModelBase { public ObservableCollection<MemEntity> items { get; set; } public object SelectedItem { get { retu
class ViewModelMain : ViewModelBase
{
public ObservableCollection<MemEntity> items { get; set; }
public object SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = SelectedItem;
OnPropertyChanged("SelectedItem");
}
}
public object _selectedItem { get; set; }
public ViewModelMain()
{
items = new ObservableCollection<MemEntity> {
new MemEntity{s = "a", Correct = 2, Incorrect = 1},
new MemEntity{s = "b"},
new MemEntity{s = "c"}
};
}
}
观点:
<ListBox x:Name="items" SelectedItem="{Binding SelectedItem}" ItemsSource="{Binding items}" DisplayMemberPath="s"/>
<TextBlock Text="{Binding SelectedItem.s}"/>
我以为我现在把所有东西都放在盒子里了,但它不起作用。我做错了什么?\u selectedItem=selectedItem;什么也不做。您有一个不使用值的setter。使_selectedItem=值
使用标准代码段创建具有concreate类型的支持私有字段的属性:
private MemEntity _selectedItem;
public MemEntity SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}
_selectedItem=selectedItem;什么也不做。您有一个不使用值的setter。使_selectedItem=值;尝试将selectedItemWow的绑定模式设置为双向!我离得多么近啊。这是一个令人尴尬的错误,但谢谢你把它整理出来。@Pelle这基本上是我在上一个问题的答案中向你展示的东西的翻版。@Nkosi,我实际上打开了上一个问题,但没有滚动到第二个答案。遗憾的是,这确实是一个重复的答案,而不是一个问题。我确实觉得很奇怪,OP基本上又问了同样的问题,而之前已经给出了公认的答案。不是你的错。我仍然支持你的答案,对此我很抱歉。基本上我认为我做错了什么,这是无关的,但我只是把那一行搞糟了。我不是故意惹麻烦的。再一次,对不起。
private MemEntity _selectedItem;
public MemEntity SelectedItem
{
get
{
return _selectedItem;
}
set
{
_selectedItem = value;
OnPropertyChanged("SelectedItem");
}
}