gpt4 book ai didi

c# - 将 ViewModel 定义为 DependencyProperty 以进行数据绑定(bind)是一种不好的做法吗?

转载 作者:行者123 更新时间:2023-12-03 10:57:38 27 4
gpt4 key购买 nike

我有一个 UserControl MyView,它有一个内部的 UserControl SubView。

2个用户控件的 View 模型与 View 具有相同的层次结构,
即,MyViewModel 内部有 SubViewModel,如下面的代码所示。

public class MyViewModel
{
private readonly SubViewModel _subViewModel = new SubViewModel();

public SubViewModel SubViewModel { get { return _subViewModel; } }

private void HandleSubViewModel()
{
// Do what is necessary to handle SubViewModel
}
}

我的问题是关于如何将 SubViewModel 绑定(bind)到 SubView。

现在我在 SubView 的代码隐藏中定义 SubViewModel 并将其绑定(bind)到 MyViewModel 类的 SubViewModel 属性。
public partial class SubView : UserControl
{
public static readonly DependencyProperty SubViewModelProperty = DependencyProperty.Register(
"SubViewModel", typeof (SubViewModel), typeof (SubView), new PropertyMetadata(default(SubViewModel)));

public SubViewModel SubViewModel
{
get { return (SubViewModel) GetValue(SubViewModelProperty); }
set { SetValue(SubViewModelProperty, value); }
}
}

<UserControl x:Class="MyProject.View.MyView"
xmlns:parts="clr-namespace:MyProject.View.Parts">
<Grid DataContext="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}, Path=MyViewModel}">
<parts:SubView SubViewModel="{Binding SubViewModel}"/>
</Grid>
</UserControl>

以这种方式绑定(bind)内部 View 模型是一种不好的做法吗?

如果是这样,我怎样才能以更好的方式绑定(bind)它?

最佳答案

它可能不好的一个原因是,如果 SubViewModel 中的属性改变,没有办法MyViewModel会知道的。所以例如如果您需要在 MyViewModel 上执行和处理任何验证水平,你将无法做到这一点。

为了解决这个问题,当属性发生变化时;您必须在 SubViewModel 中引发事件并制作 MyViewModel订阅它并在收到它后做出适当的 react 。

除此之外,我认为没有任何缺点。但请阅读这些链接以获取更多信息:
MVVM and nested view models

MVVM: How to handle interaction between nested ViewModels?

关于c# - 将 ViewModel 定义为 DependencyProperty 以进行数据绑定(bind)是一种不好的做法吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/39717514/

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