在WPF中进行数据绑定时,显示“不可用”值的典型模式是什么?
例如我使用的是MVVM,我视图中的TextBlock
绑定到我的viewmodel的属性,其中一些是int
。有时我想在我的视图中暂时显示两个短划线(“ - ”)而不是属性值。
我可以将属性更改为字符串,然后在getter中添加一些逻辑以指定它是返回值还是“ - ”。这可能是使用MVVM的合适方式,但有没有更简单的方法?
有没有办法利用TextBlock
的{{1}}?或者是否有另一种临时暂停数据绑定并显示“不可用”值的方法?
答案 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。