我使用
构建MVVM模式TreeView -root
- 项目
---子项目
当点击任何TreeViewItem时,我想在一个单独的窗口中显示实际对象(模型)的细节。
但我不确定如何访问该对象的数据。
private void TreeView_OnSelectedItemChanged(object sender, RoutedEventArgs e)
{
TreeViewItem tvi = e.OriginalSource as TreeViewItem;
MessageBox.Show(tvi.ToString());
}
答案 0 :(得分:4)
我不建议在TreeView_OnSelectedItemChanged
样式MVVM
应用中使用WPF
。
定义ModelView
绑定到TreeeViewItem
{{1}} {{1}}属性的绑定,并且总是知道选择,并且可以选择项目同样感兴趣的是代码。
答案 1 :(得分:4)
我之前的回答是解决的问题不仅仅是问题。
由于您希望通过显示TreeViewItem的绑定对象的详细信息来响应TreeView中的选择更改,因此您可以使用Caliburn Micro的Action
机制。您可以将TreeView的SelectedItemChanged
事件连接到ViewModel中的方法。
您的视图中的示例:
<TreeView
ItemsSource="{Binding YourDataObjects}"
cal:Message.Attach="[Event SelectedItemChanged] = [Action OnSelectedItemChanged($this)]"/>
在您的ViewModel中,您将拥有此方法:
public void OnSelectedItemChanged(YourDataObject selectedItem)
{
//Do something with the selected item here
}
如果你在设置时遇到问题,请告诉我。
答案 2 :(得分:0)
在ViewModel中,创建一个TreeViewItem类型的依赖项属性,并在View中将TreeView的SelectedValuePath属性绑定到新的依赖项属性。
答案 3 :(得分:0)
在MVVM模式中,与控件关联的数据应该位于 DataContext 依赖项属性中。