最佳实践是使用模型还是简单属性?
Posted
技术标签:
【中文标题】最佳实践是使用模型还是简单属性?【英文标题】:Best practice is to use a model or a simple property? 【发布时间】:2015-09-29 08:21:15 【问题描述】:我正在重构一段我之前写过的代码。我编写了一个自定义用户控件,允许用户选择对应对象。
viewmodel 有 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
在我需要使用它的视图中,我做了一些事情
<views4:CounterpartChooserControl Grid.Row="9" Grid.Column="1" Margin="5,2,5,2" DataContext="Binding CounterPartModel" >
</views4:CounterpartChooserControl>
这意味着我在视图模型中有一个属性定义为
[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 中定义)发生更改时,此信息不会直接传播到主视图模型(这是合理的,因为它位于视图模型内,因此嵌套属性不会在主视图模型中通知)。
这样可以吗,或者我应该在主 viwemodel 中有一个 SelectedCounterpart,通过 XAML 将它绑定为
视图本身是否以某种方式解析了数据上下文?
【问题讨论】:
请同时指定虚拟机类型名称。没有足够的上下文。 【参考方案1】:由于并非所有上下文都可用,我将在这里和那里假设一些事情。
没关系,因为您实际上是在子 vm 中处理模型。子虚拟机只知道它拥有的模型(CounterPartModel)。如果是同一个引用,那么你对子虚拟机内的模型所做的更改应该直接在主虚拟机中可见。
否则你必须设置某种形式的通信(消息、服务、感兴趣等)来通知其他虚拟机发生变化。
【讨论】:
以上是关于最佳实践是使用模型还是简单属性?的主要内容,如果未能解决你的问题,请参考以下文章
使用 Core Data 在视图中引用模型对象的最佳实践是啥?
Ext.define() 中有关 initComponent() 的最佳实践