假设我想创建一个WPF表单。 在这种形式中,有一堆标题和副标题。 这些标题和副标题使用相同的控件进行演示。 该控件只是顶部分隔符和底部分隔符之间的标签。 标题必须有两个分隔符,副标题必须只有底部分隔符。 此控件中有一个布尔依赖属性。如果设置为true,则会有一个顶部分隔符。
可以在模型中为每个标题/副标题绑定此属性吗?
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 -----------------
在看到Valim Martynov建议的IValueConverter之后,我看到一些人用他们的模型来处理这些情况。 所以这是我的结论:
我是对的吗?
答案 0 :(得分:1)
您应该使用IValueConverter
绑定实际数据,而不是为视图创建合成属性。
例如,您可以拥有包含TitleType
,Title
和Subtitle
元素的Text
枚举。
然后写新转换器:
public class TitleTypeToSeparatorVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var titleType = (TitleType) value;
switch(titleType)
{
case TitleType.Title:
// return some value
case TitleType.Subtitle:
// return some another one value
default:
// handle this scenario
}
}
}