0
假设我想创建一个WPF表单。 在这种形式下,有一堆标题和字幕。 这些标题和副标题使用相同的控件进行演示。 此控件只是顶部分隔符和底部分隔符之间的标签。 标题必须有分隔符,字幕只能有底部分隔符。 这个控件有一个布尔依赖性特性。如果它设置为true,则有一个顶部分隔符。MVVM模式视图的特定模型?
在模型中为每个标题/副标题绑定此属性可以吗?
public class MyModelObject : ViewModelBase
{
private string _labelName;
public string LabelName
{
get
{
return _labelName;
}
set
{
_labelName=value;
RaisePropertieChanged(()=>LabelName);
}
}
private bool _topSeparator;
public bool TopSeparator
{
get
{
return _topSeparator;
}
set
{
_topSeparator=value;
RaisePropertieChanged(()=>TopSeparator);
}
}
}
我不太喜欢它......因为模型应该没有关于视图的信息。但有没有一种干净的方式来做到这一点?
我在想一个特定的视图模型......但我不确定它。
在此先感谢!
---------------- UPDATE -----------------
看的IValueConverter因为瓦迪姆·马丁诺夫建议后,我看到一些人用他们的模型来处理这些情况。 所以这是我的结论:
- 当有一个或两个视图特定的属性,只要一两个特定的IValueConverter
- 如果有多个视图特定的属性,最好做一个包装(有一个看看这篇文章:Binding Model properties directly in View)
对吗?
非常有用的!我知道IValueConverter,但我没有想到这样使用它们。他们是否为每个“查看问题”去?我的意思是,你永远不应该建立一个“视图模型”? (顺便说一句,我很抱歉我的英语,你可以看到,这不是我的第一语言:p) – Speuline
@Speuline你永远不应该建立一个“视图模型”。然后你有模型类,你需要调整你的视图的数据。视图可以包含平台特定的属性,如Visibiliity,Color,Brush和其他。你不应该在ViewModel或Model类中使用它。然后,您需要创建从数据(模型)到视图的转换器,并使用其转换器绑定数据属性。 另外,您可以使用数据触发器。 你很熟练地理解你的模型,不是吗? –
@Speuline也可能是一个坏主意,特别是为视图创建属性,我同意。但是你已经有了一些指示标题级别的值。您可以使用它并为此已有的属性创建转换器。 –