我有一个绑定到Combobox的集合,它的SelectedItem绑定到了我的viewmodel属性SelectedItem
。
<ComboBox ItemsSource="{Binding itemSource}"
SelectedItem="{Binding SelectedItem}"/>
SelectedItem
的类如下:
public class SelectedItem
{
public AnotherViewModel anotherViewModel {get;set;}
}
我使用了如下的Usercontrol:
<local:usercontrol DataContext="{Binding SelectedItem.anotherViewModel}"/>
我正在尝试在主视图中更改组合框的选择时更改用户控件的内容。
对anotherViewModel
属性的更改仅在第一时间反映给视图。
在调试代码时,我发现anotherViewModel
的属性包含新值,但无法反映给视图。
任何帮助将不胜感激。
修改
Public class MainViewModel
{
public string property1 {get;set;} //has propertychanged implemented
public ObservableCollection<Item> Items {get;set;} //combobox itemsource
public Item SelectedItem {get;set;}//combobox selecteditem
}
public class Item
{
public AnotherViewModel anotherViewModel {get;set;}//has propertychanged implemented
}
public class AnotherViewModel
{
public string property1 {get;set;} //has propertychanged implemented
public string property2 {get;set;} //has propertychanged implemented
public ObservableCollection<string> items {get;set;} //has propertychanged implemented
}
<Window>
<Textbox Text="{Binding property1}"/>
<ComboBox ItemsSource="{Binding Items}"
SelectedItem="{Binding SelectedItem}"/>
<local:usercontrol DataContext="{Binding SelectedItem.anotherViewModel}"/>
<Window>
<UserControl>
<ListView ItemsSource="{Binding items}"/>
</UserControl>
答案 0 :(得分:0)
您不应执行封装了AnotherViewModel类的SelectedItem类。
相反,在作为窗口数据上下文的viewmodel中,您应该具有:
private AnotherViewModel _selectedItem;
public AnotherViewModel SelectedItem
{
get { return _selectedItem; }
set { _selectedItem = value; OnPropertyChanged(nameof(SelectedItem)); }
}
然后,您编辑xaml,以便您的usercontrol绑定到您的viewmodel属性SelectedItem:
<local:usercontrol DataContext="{Binding SelectedItem}"/>
编辑:
标准结构为:
<Combobox>
和一个xaml元素<local:usercontrol>
。SelectedItem
的属性AnotherViewModel
,并在其设置方法中引发了PropertyChangedEvent。usercontrol
内部xaml绑定到您在AnotherViewModel
类中定义的属性。AnotherViewModel
属性。然后将<local:usercontrol>
的Datacontext绑定到MainViewModel SelectedItem
属性(如您在问题中所做的那样)。