在WPF中进行数据绑定时“不可用”值的模式

时间:2009-08-05 21:15:28

标签: wpf data-binding mvvm

在WPF中进行数据绑定时,显示“不可用”值的典型模式是什么?

例如我使用的是MVVM,我视图中的TextBlock绑定到我的viewmodel的属性,其中一些是int。有时我想在我的视图中暂时显示两个短划线(“ - ”)而不是属性值。

我可以将属性更改为字符串,然后在getter中添加一些逻辑以指定它是返回值还是“ - ”。这可能是使用MVVM的合适方式,但有没有更简单的方法?

有没有办法利用TextBlock的{​​{1}}?或者是否有另一种临时暂停数据绑定并显示“不可用”值的方法?

4 个答案:

答案 0 :(得分:3)

FallbackValue仅在无法解析绑定路径或转换器返回DependencyProperty.UnsetValue时使用。转换器通常在执行MVVM时被避开。我的建议是有两个属性,一个包含int值,另一个包含显示值:

public int SomeValue
{
    get { return _someValue; }
    set
    {
        if (_someValue != value)
        {
            _someValue = value;
            OnPropertyChanged("SomeValue");
            OnPropertyChanged("SomeValueDisplay");
        }
    }
}

public string SomeValueDisplay
{
    get { return _someValue == -1 ? "--" : _someValue.ToString(); }
}

这为您提供了两全其美的体验。您的VM逻辑与int属性一起使用,但您的TextBlock直接绑定到基础string的{​​{1}}表示。

答案 1 :(得分:0)

由于TextBlock已经显示了文字,为什么不只是在绑定中添加一个自定义IMultiValueConverter,如果有一些"--"值,则会返回bool VM?

答案 2 :(得分:0)

WPF已经在幕后使用转换器(例如int to string)在文本块中显示您的值。如果您想更改功能,可以提供一个简单的自定义转换器来处理您能想到的任何特殊情况。

答案 3 :(得分:0)

你可以为属性使用nullable int,并在绑定中指定TargetNullValue = - 。

如果您还需要原始值,可以使用实际的int值作为后备存储,并使用逻辑来确定是返回值还是null。