Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如果我在一个主窗口视图上有两个UserControls,并且我想在它们之间传递一个属性,我该怎么做?_C#_Wpf_Xaml_Mvvm_User Controls - Fatal编程技术网

C# 如果我在一个主窗口视图上有两个UserControls,并且我想在它们之间传递一个属性,我该怎么做?

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 这是我的

我有两个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
添加到
绑定中。第二个例子确实应该按原样工作。