gpt4 book ai didi

c# - 从主窗口访问用户控件中的属性 (WPF/MVVM)

转载 作者:行者123 更新时间:2023-12-03 02:47:37 24 4
gpt4 key购买 nike

我遇到了一个小问题,我正在寻找正确的方法来实现它。

我有一个主窗口和一个用户控件来显示一些结果,在主窗口中我有一个“加载”按钮来加载一些数据,用户控件应该显示它们。

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

我应该将 MainWindowModel 传递给 UserControlModel 吗?;

我应该将 UserControlModel 传递给 MainWindowModel 吗?;

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

如有任何建议,我们将不胜感激。谢谢!

编辑1:这就是我如何调用我的用户控件:

<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>

我的问题出现的用户控件是 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>

关于c# - 从主窗口访问用户控件中的属性 (WPF/MVVM),我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/48423122/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com