gpt4 book ai didi

c# - 公开 MVVM 中内置的用户控件的属性

转载 作者:行者123 更新时间:2023-11-30 22:10:27 28 4
gpt4 key购买 nike

类似这样的问题有很多,但仍然无法得到我真正想要的,而且它们都有一些与我不同的地方,那就是:我有一个 UserControl:

  • 在名为UCProject 的类库项目中单独构建;
  • UCProject 项目有一个用于控制的View 及其ViewModel
  • UserControl 将它自己的一些控件和 View 中的 UIElements 属性绑定(bind)到 ViewModel 中声明的属性,当然还有 UCProject;
  • 如何显示或公开或使 ViewModel 属性可供可能托管此 UserControl 的项目(例如可能称为 GlobalProject)的页面或窗口访问;

我正在构建这个 UserControl,我想为它构建事件、属性......我希望它被其他人用作给定的程序集,所以它的代码不是可访问,他们只能使用它,我想尊重 MVVM 模式,但我不清楚如何实现这一点,我是否应该在 UserControl 的代码隐藏中编写此属性和事件View还是应该放在ViewModel中,那样的话我怎么从外部访问它们,就像我们日常使用第三方控件一样

最佳答案

如果我猜对了,您想要将子 UserControl 的 ViewModel 的属性公开给包含可能是窗口或其他 UserControl 的父根元素

有两种方法:

首先,DataContext DP 是可继承的,即子控件从父控件继承它,除非将其显式设置为其他值。因此,您可以做的是拥有公共(public) ViewModel 并将其设置为父 UserControl 上的 DataContext,并且两者都可以访问其属性


其次,如果您想为父 UserControl 和子 UserControl 使用单独的 ViewModel。您始终可以通过 DataContext 访问 subview 模型的属性。让我用一个例子来解释:

<UserControl x:Name="ParentUserControl">
<StackPanel>
<local:ChildUserControl x:Name="Child"/>
<TextBlock Text="{Binding DataContext.PropertyName, ElementName=Child}"/>
</StackPanel>
</UserControl>

其中 PropertyName 是 ChildUserControl 的 ViewModel 中的属性。

在这里,您可以看到位于 ParentUserControl 中的 TextBlock 绑定(bind)到子 UserControl 的 ViewModel 中的属性。

关于c# - 公开 MVVM 中内置的用户控件的属性,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/20809901/

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