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

BJl*_*du4 3 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;
    }
}
Run Code Online (Sandbox Code Playgroud)

我需要在哪里使用MVVM模式?在模型文件夹中?或者创建一个转换器文件夹?

Tse*_*eng 7

从技术上讲,转换器是View的一部分,因此也是View Logic的一部分.这就是你应该如何对待imho.

BooleanToVisibility是一个很好的例子.在你的ViewModel你只有一个布尔属性(可见或不可见),导致您的视图模型没有你的UI /视图的知识.

例如,在一个UI(例如桌面)中,您可能希望将布尔值"转换"为文本(即"成功"和"失败"),在其他UI(Win8应用程序)中,您可能希望将布尔值转换为支票/十字图标.

这意味着,这个逻辑(检查/交叉或"成功"/"失败")不属于您的ViewModel类,并且严格地非常特定于您的应用程序的UI /视图,因此唯一合理的使用它的地方是View-Project(假设您分别为Model,ViewModel和View设置了至少3个不同的项目).

编辑:BooleanToVisibility从上面扩展我的示例:正如您可以从命名空间中看到的那样System.Windows.Controls.BooleanToVisibilityConverter,控件所在的位置是纯View类.

此外,更重要的是,Converter类特定于WPF,一个特定的UI框架.如果您使用任何其他UI框架,则此类是无用的.因此,它们既不属于Model或ViewModel.视图是将它们放入的唯一合理位置.


Tig*_*ran 0

有没有文件夹是一个代码分配问题。所以根据你的喜好选择。

Converter 本身就像一个单独的类,就像在您的例子中一样,当要应用它时,它的定义最终会出现在控件的 XAML 中,并且它的实例是在控件的绑定规范的标记中声明的。

请遵循示例链接:值转换器