我有一个小问题,我正在寻找实现它的正确方法。
我有一个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
,然后通过ContentControl
为Binding
提供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…