0

我构建了一个 MVVM 模式 TreeView

-根 --Item ---子


单击任何 TreeViewItems 时,我想在单独的窗口中显示实际对象(模型)的详细信息。

但我不确定如何访问对象的数据。

private void TreeView_OnSelectedItemChanged(object sender, RoutedEventArgs e)
{
    TreeViewItem tvi = e.OriginalSource as TreeViewItem;
    MessageBox.Show(tvi.ToString());
}
4

4 回答 4

5

我不建议TreeView_OnSelectedItemChangedMVVM样式应用程序中使用WPF

ModelView在绑定的 IsSelected属性上定义绑定TreeeViewItem,您将始终知道选择,并且也可以从代码中选择感兴趣的项目。

于 2012-10-12T10:03:35.727 回答
4

我之前的回答是解决的问题比所要求的要多。

由于您想通过显示 TreeViewItem 绑定对象的详细信息来对 TreeView 中的选择更改做出反应,因此您可以使用Caliburn MicroAction机制。您可以SelectedItemChanged将 TreeView 的事件连接到 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 
}

如果您在设置时遇到问题,请告诉我。

于 2012-10-12T11:46:10.110 回答
0

在您的 ViewModel 中,创建 TreeViewItem 类型的依赖项属性,并在 View 中将 TreeView 的 SelectedValuePath 属性绑定到您的新依赖项属性。

于 2012-10-12T10:01:03.777 回答
0

在 MVVM 模式中,与控件关联的数据应该位于DataContext依赖属性中。

于 2012-10-12T11:18:55.840 回答