从MainWindow(WPF / MVVM)访问UserControl中的属性 - c#

我有一个小问题,我正在寻找实现它的正确方法。

我有一个MainWindow和一个UserControl显示一些结果,在MainWindow中,我有一个“加载”按钮来加载一些数据,而UserControl应该显示它们。

我不确定在WPF和MVVM中执行此操作的正确方法是什么:

我应该将MainWindowModel传递给UserControlModel吗?

我应该将UserControlModel传递给MainWindowModel吗?

我应该在UserControl中公开需要填充为DependencyProperty的属性,然后将其填充到MainWindow上吗?

任何建议,将不胜感激。谢谢!

编辑1:
这就是我所谓的UserControl的方式:

<TabControl Grid.Row="1"
            Grid.RowSpan="2"
            Grid.Column="0"
            VerticalAlignment="Stretch">

    <!--Result View-->
    <TabItem Header="{Binding TabImportHeader}">
        <results:ResultView/>
    </TabItem>

    <!--Configuration Tab-->
    <TabItem Header="{Binding TabConfigurationHeader}">
        <configuration:ConfigurationView />
    </TabItem>
</TabControl>

我出现问题的UserControl是ResultView

参考方案

MainWindowVMInstance.UserControlVMInstance.Property

UserControl在您的MainWindow内部。

因此,您的MainWindow具有UserControlVM的属性(/实例)。

注意:如果您还需要在MainWindowVM中引用UserControlVM,请将其传递给构造函数并将其存储为属性。

在xaml中,它看起来像这样(在MainWindow.xaml内部):

<ContentControl Content="{Binding UserControlVMInstance}"/>

不要忘记DataTemplate

<DataTemplate DataType="{x:Type vm:UserControlVM}">
    <view:UserControlView/>
</DataTemplate>

问题更新后编辑:

这是一个示例,其中包含代码的一部分,以演示WPF和MVVM的实际作用。您只需在DataTemplate中定义UserControl.Resources,然后通过ContentControlBinding提供UserControlVM的实例。 WPF知道此类型有一个DataTemplate,并将在UserControlView所在的位置添加ContentControl的实例。

<MainWindow>
    <MainWindow.Resources>
        <DataTemplate DataType="{x:Type vm:UserControlVM}">
            <view:UserControlView/>
        </DataTemplate>
    </MainWindow.Resources>

    <!-- Your TabControl -->
    <TabControl>
        <!--Result View-->
        <TabItem Header="{Binding TabImportHeader}">
            <ContentControl Content="{Binding TabImportCONTENT}"/>
        </TabItem>
    </TabControl>
</MainWindow>

WPF-将窗口大小设置为子用户控件大小 - c#

我有一个选项卡控件,该控件动态地填充有包含各种大小的用户控件的选项卡。打开选项卡后,我希望窗口自动调整大小,使其在活动用户控件下有意义。有一种干净的方法可以做到这一点吗?我正在使用标准的mvvm模式。 参考方案 在Window类上使用SizeToContent属性。<Window x:Class="WpfApplication1.MainWi…

WPF MVVM-简单登录到应用程序 - c#

我将继续学习WPF,目前主要关注MVVM,并使用Karl Shifflett的“盒子中的MVVM”教程。但是有一个关于在视图/视图模型之间共享数据以及如何更新屏幕上的视图的问题。 ps。我还没有介绍IOC。下面是我在测试应用程序中的MainWindow的屏幕截图。它分为3个部分(视图),一个标题,一个带按钮的滑动面板,其余作为应用程序的主视图。该应用程序的目…

WPF AvalonDock添加文档 - c#

我有一个带有AvalonDock的窗口。在启动时,将打开一个文档,其中充满LocControllers用户控件(LocControllersViewModel)。现在,当双击LocController时,我想让LocController用户控件在新文档中打开。因此,第一个文档始终是概述,充满了LocController用户控件,而其他文档则在双击后添加。我已…

MVVM ViewModel与View交互,这是真的MVVM吗? - c#

例如,假设我们有一个带有2个选项卡和一个文件菜单的WPF窗口。文件菜单有两个项目“隐藏选项卡1”,“显示选项卡1”该程序具有以下类别:MainView.xamlMainViewModel.cs然后将“隐藏选项卡1”菜单命令绑定到MainViewModel.cs中包含的HideTab1Command。HideTab1然后直接与View交互以在ViewModel…

C#WPF-如何始终从文本框中获取当前文本? - c#

我在FileWindow.xaml中有一个TextBox:<TextBox x:Name="textBox" HorizontalAlignment="Left" Height="23" Margin="233,230,0,0" TextWrapping="Wra…