具有 MVVM 模式的视图的特定模型?
Specific model for the view with MVVM pattern?
假设我想创建一个 WPF 窗体。
在这种形式中,有一堆标题和副标题。
论文标题和副标题使用相同的控件进行呈现。
此控件只是顶部分隔符和底部分隔符之间的标签。
标题必须有两个分隔符,副标题必须只有底部分隔符。
此控件中有一个布尔依赖属性。如果设置为真,则有一个顶部分隔符。
是否可以在模型中为每个 title/subtitle 绑定此属性?
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);
}
}
}
我不太喜欢...因为模型应该没有关于视图的信息。但是有没有一种干净的方法来做到这一点?
我正在考虑视图的特定模型...但我不确定。
提前致谢!
----------------更新----------------
在按照 Vadim Martynov 的建议查看 IValueConverter 之后,我看到一些人包装他们的模型来处理这些情况。
所以这是我的结论:
- 当有一个或两个视图特定属性时,只需制作一个或两个特定的 IValueConverter
- 当有几个特定于视图的属性时,最好制作一个包装器(看看这个post:Binding Model properties directly in View)
我说得对吗?
您应该使用 IValueConverter
来绑定您的实际数据,而不是为视图创建合成属性。
例如,您可以拥有包含 Title
、Subtitle
和 Text
元素的 TitleType
枚举。
然后编写新的转换器:
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
}
}
}
假设我想创建一个 WPF 窗体。 在这种形式中,有一堆标题和副标题。 论文标题和副标题使用相同的控件进行呈现。 此控件只是顶部分隔符和底部分隔符之间的标签。 标题必须有两个分隔符,副标题必须只有底部分隔符。 此控件中有一个布尔依赖属性。如果设置为真,则有一个顶部分隔符。
是否可以在模型中为每个 title/subtitle 绑定此属性?
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);
}
}
}
我不太喜欢...因为模型应该没有关于视图的信息。但是有没有一种干净的方法来做到这一点?
我正在考虑视图的特定模型...但我不确定。
提前致谢!
----------------更新----------------
在按照 Vadim Martynov 的建议查看 IValueConverter 之后,我看到一些人包装他们的模型来处理这些情况。 所以这是我的结论:
- 当有一个或两个视图特定属性时,只需制作一个或两个特定的 IValueConverter
- 当有几个特定于视图的属性时,最好制作一个包装器(看看这个post:Binding Model properties directly in View)
我说得对吗?
您应该使用 IValueConverter
来绑定您的实际数据,而不是为视图创建合成属性。
例如,您可以拥有包含 Title
、Subtitle
和 Text
元素的 TitleType
枚举。
然后编写新的转换器:
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
}
}
}