我需要写一个值转换器。像这样:
public class HostStatusToDescriptionConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
return (bool)value == true ? "Статус сервера: Подключён" : "Статус сервера: Недоступен";
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
return DependencyProperty.UnsetValue;
}
}
我需要使用MVVM模式吗?在模型文件夹中?或者创建一个转换器文件夹?
答案 0 :(得分:7)
从技术上讲,转换器是View的一部分,因此也是View Logic的一部分。那就是你应该如何对待它。
BooleanToVisibility就是一个很好的例子。在ViewModel
中,您只有布尔属性(可见或不可见),因为您的ViewModel不了解您的UI / View。
例如,在一个用户界面(例如桌面)中,您可能希望"转换"对于文本的布尔值(即"成功"和"失败"),在其他UI(Win8应用程序)中,您可能希望使用布尔值转换为检查/交叉图标。
这意味着,这个逻辑(检查/交叉或"成功" /"失败")不属于您的ViewModel类,严格来说非常特定于UI / View您的应用程序,因此唯一合理的使用位置是View-Project(假设您分别为Model,ViewModel和View设置了至少3个不同的项目。)
修改:从上方展开BooleanToVisibility
上的示例:
正如您可以从命名空间中看到的那样,它位于System.Windows.Controls.BooleanToVisibilityConverter
中,这是控件所在的位置,它们是纯View
类。
此外,更重要的是,Converter类特定于WPF,一个特定的UI框架。如果您使用任何其他UI框架,则此类是无用的。因此,他们既不属于Model或ViewModel。视图是将它们放入的唯一合理位置。
答案 1 :(得分:3)
查看模型 是一个值转换器本身。
您不需要在单独的课程中执行此类转换。只需创建适当的属性,例如HostStatusDescription
,然后将控件绑定到此属性而不是布尔值。
答案 2 :(得分:0)
文件夹与否是代码销毁问题。所以选择你的偏好。
转换器本身就像一个单独的类,就像你的情况一样,它的定义最终会在控件的XAML中应用,并且它的实例在控件的绑定规范的标记中声明。
按照示例链接:Value Converters