C# 如果我在一个主窗口视图上有两个UserControls,并且我想在它们之间传递一个属性,我该怎么做?
我有两个UserControls,一个只包含一个TreeView,另一个是当TreeView中的一个项目被选中时加载的表单 喜欢这个选项对话框 我已经在TreeView的SelectedItem属性方面遇到了一些问题,但是已经找到了几种解决方案,可以在TreeView的codebehind文件或其ViewModel中获取SelectedItem 我的问题是: 如何将TreeView的SelectedItem从它所属的UserControl传递到同一窗口中的ContentControl 这是我的意思的一个例子:C# 如果我在一个主窗口视图上有两个UserControls,并且我想在它们之间传递一个属性,我该怎么做?,c#,wpf,xaml,mvvm,user-controls,C#,Wpf,Xaml,Mvvm,User Controls,我有两个UserControls,一个只包含一个TreeView,另一个是当TreeView中的一个项目被选中时加载的表单 喜欢这个选项对话框 我已经在TreeView的SelectedItem属性方面遇到了一些问题,但是已经找到了几种解决方案,可以在TreeView的codebehind文件或其ViewModel中获取SelectedItem 我的问题是: 如何将TreeView的SelectedItem从它所属的UserControl传递到同一窗口中的ContentControl 这是我的
<Window x:Class="Project.MainWindow"
xmlns:v="clr-namespace:MicroMVVM.View">
<v:TreeViewControl /> <!-- Pass SelectedItem from here -->
<ContentControl Content="TreeViewsSelectedItem" /> <!-- To here. -->
</Window>
将正确类型的属性添加到设置为
窗口的对象中。DataContext
然后从两个子视图绑定到该值:
<Window x:Class="Project.MainWindow"
xmlns:v="clr-namespace:MicroMVVM.View">
<v:TreeViewControl SelectedItem="{Binding SelectedItem}" />
<ContentControl Content="{Binding SelectedItem}" />
</Window>
您甚至可以直接绑定:
<Window x:Class="Project.MainWindow"
xmlns:v="clr-namespace:MicroMVVM.View">
<v:TreeViewControl Name="TreeViewControl" />
<ContentControl Content="{Binding SelectedItem, ElementName=TreeViewControl}" />
</Window>
我个人会将ContentControl.Content
绑定到MyTreeView。选择editem
,然后使用DataTemplates
告诉WPF如何绘制不同的项目类型。我有一些基于字符串等属性更改DataTemplate
的例子,或者使用隐式DataTemplates
我试图使用您的建议,但是它似乎对我不起作用。也许我做错了什么?它们是两个不同的数据上下文,当我尝试直接绑定时,会出现一个错误:40:BindingExpression路径错误:“在“object”上未找到SelectedNode”属性哪个不起作用?对于第一个建议,请尝试将DependencyProperty
添加到MainWindow.xaml.cs
文件中,并从两个属性绑定到它,如图所示。。。您可能需要将Mode=TwoWay
添加到绑定中。第二个例子确实应该按原样工作。