gpt4 book ai didi

wpf - 如何为用户控件创建 MVVM 而不将所有内部结构暴露给消费者?

转载 作者:行者123 更新时间:2023-12-03 10:49:31 28 4
gpt4 key购买 nike

我正在使用 MVVM 设计一些复杂的用户控件。 UserControls 的数据上下文处理所有逻辑并将 UserControl 交互的结果提供给控件的使用者。

我面临的问题是,看起来 internal 不适用于绑定(bind),如果我尝试绑定(bind)到非公共(public)绑定(bind)的源属性不起作用。如果我必须打开(amek public)我的 VM 顶部的所有源属性能够绑定(bind)它们,那么我将打开 UserControl 和使用者的内部:

  • 对使用什么属性感到困惑。
  • 可以使用不供外部使用的属性来破坏事物。

  • 有任何想法吗?

    提前致谢。

    编辑:好吧,看看 this看起来来源必须始终是公开的,对吧。但是我仍然面临公开内部信息的问题。有什么解决办法吗?

    示例:

    您创建一个通用的用户控件。该控件应该是一个黑盒,它接受最终用户提供的查询,向他显示(以某种方式)查询返回的行,并让 UserControl 使用者获取选定的值。该控件是使用显示行的组合框实现的。

    UserControl 位于 UserControl.xaml 中,并且有一个带有 UserControl 的 ViewModel 的 UserControlVM.cs 文件。

    ViewModel 包含要执行的查询、查询返回的项目列表和所选项目。项目列表和选定项目是公开的,以便能够绑定(bind)到 UserControl。

    消费者在其窗口内使用 UserControl 的一个实例,在其窗口 View 模型内使用 UserControlVM 的一个实例。我面临的问题是最终用户有权访问查询返回的项目列表,而他只应该有权访问所选项目。

    最佳答案

    Binding 的所有属性目标类(class)需要公开

    这是一个可能的替代解决方案:

    您的 DataContext (如果是 ViewModel ),很可能实现 INotifyPropertyChanged .
    如果是这样,那么当您设置 DataContext ( ViewModel ) 在 UserControl 上,只需订阅PropertyChanged事件处理程序,然后在您的代码隐藏中编写逻辑以根据更改的数据操作您的控件。

    关于wpf - 如何为用户控件创建 MVVM 而不将所有内部结构暴露给消费者?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/10085655/

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