gpt4 book ai didi

c# - 最佳实践是使用模型还是简单属性?

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

我正在重构一段我以前写过的代码。我编写了一个自定义用户控件,允许用户选择对应对象。

View 模型有 2 个属性定义为

#region Properties
[ViewToViewModel(MappingType = ViewToViewModelMappingType.TwoWayViewWins)]
public bool AllowNull
{
get { return (bool)GetValue(AllowNullProperty); }
set { SetValue(AllowNullProperty, value); }
}
public static readonly DependencyProperty AllowNullProperty = DependencyProperty.Register("AllowNull", typeof(bool),
typeof(CounterpartChooserControl), new PropertyMetadata(default(bool)));


/// <summary>
/// This Dependency property is used upon KeyDown to propagate the click to the target usercontrol
/// </summary>
public ICommandSource DestinationControl
{
get { return (ICommandSource)GetValue(DestinationControlProperty); }
set { SetValue(DestinationControlProperty, value); }
}

public static readonly DependencyProperty DestinationControlProperty = DependencyProperty.Register("DestinationControl", typeof(ICommandSource), typeof(CounterpartChooserControl),
new FrameworkPropertyMetadata(null, FrameworkPropertyMetadataOptions.None));
#endregion

在我需要使用它的 View 中,我做了一些事情
  <views4:CounterpartChooserControl Grid.Row="9" Grid.Column="1" Margin="5,2,5,2" DataContext="{Binding CounterPartModel}" >
</views4:CounterpartChooserControl>

这意味着我在 viewmodel 中有一个属性定义为
[ViewModelToModel("Model")]
public CounterPartModel CounterPartModel
{
get { return GetValue<CounterPartModel>(CounterPartModelProperty); }
set { SetValue(CounterPartModelProperty, value); }
}

public static readonly PropertyData CounterPartModelProperty = RegisterProperty("CounterPartModel", typeof(CounterPartModel), null);

我现在面临的问题是,当 SelectedItem(在 CounterpartChooserViewModel 中定义)发生更改时,此信息不会直接传播到主视图模型(这是合理的,因为它位于 View 模型内,因此不会通知嵌套属性在主视图模型中)。

这可以吗,或者我应该在主 viwemodel 中有一个 SelectedCounterpart,通过 XAML 将它绑定(bind)为



View 本身是否以某种方式解决了数据上下文?

最佳答案

由于并非所有上下文都可用,因此我将在这里和那里假设一些事情。

没关系,因为您实际上是在子 vm 中处理模型。子虚拟机只知道它拥有的模型(CounterPartModel)。如果它是相同的引用,那么您对子 vm 内的模型所做的更改应该直接在主 vm 中可见。

否则,您必须设置某种形式的通信(消息传递、服务、感兴趣等)来通知其他 vm 更改。

关于c# - 最佳实践是使用模型还是简单属性?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32839144/

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