WPF MVVM,我需要把我的转换器?

时间:2014-03-12 13:32:59

标签: c# wpf mvvm

我需要写一个值转换器。像这样:

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模式吗?在模型文件夹中?或者创建一个转换器文件夹?

3 个答案:

答案 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