转换器 - 我应该使用多少个?在WPF中是否有其他使用MVVM的方法?

3

我有时会遇到标签,其中内容随某些对象的值动态变化。虽然字符串是静态的,但它们需要根据我的属性进行更改。

一种简单的方法是实现一个转换器,它接受我的对象并返回我想要的字符串。这将导致许多只有一个任务并且无法在不同情况下使用的转换器。

我也可以在我的 ViewModel 中更改标题 -> 这是更好的方法吗?


1
创建通用转换器,它将根据传递给它的对象类型返回字符串。如果转换器对您造成问题,您还可以使用DataTrigger - Rohit Vats
转换器是将视图连接到视图模型的一种粘合剂。如果没有简单的方法来创建通用的转换器,我个人认为拥有许多小型单一目的的转换器并不是一个大问题 - 每个转换器都有非常清晰和模块化的目的,使您的解决方案更易读。 - Baldrick
2
我会在ViewModel中处理这些更改。我个人不喜欢有许多转换器。代码分散,我发现它有点难以维护。 - Gerrit Fölster
Rohit,你应该把你的回答发布为一个答案。这基本上总结了处理无法维护的转换器数量的方法。 - ouflak
2个回答

2
在您的视图模型中,您可以这样设置动态标签属性:
String DynamicLabel 
{
    get
    {
         if ( this.x == 1 )
         {
              return staticString1;
         }
         //etc etc 
    }
}

每当需要更改标签时,只需调用以下代码:
OnPropertyChanged("DynamicLabel")

你的XAML代码应该类似于下面这样:

<textblock text="{Binding Path = DynamicLabel , updateSourceTrigger = OnPropertyChanged}"/>

谢谢,我会采用这种方法的 ;) - Frame91
很棒,总的来说这两个答案都不错,我主要使用视图模型来处理属性,并使用转换器来改变类型,例如将bool转换为visibility,我猜这也是你的做法。 - Chris

1
我认为这可能对你有所帮助,你可以针对不同情况传递参数,并根据你在转换器中传递的参数检查条件。
Binding TestValue, Converter={StaticResource TestConverter}, ConverterParameter='Test'}

    public object Convert(object value, Type targetType, object parameter, string language)
    {
        if (parameter != null && parameter.Equals("Test"))
        { //Do some operation 
        }
    }

通过使用参数,您可以在单个转换器中执行不同的操作。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接