我有一个标签和一个文本框,它会显示两个不同的值。如何为WPF中的字段创建自定义转换器?
if(a != null && b == null) {
return "a";
}
else if(a == null && b != null) {
return "b";
}
的逻辑很简单,但如何在XAML和MVVM模式适合呢?我有一个viewmodel和一个视图(xaml-ui)。代码应该放置在视图模型中。
我有一个标签和一个文本框,它会显示两个不同的值。如何为WPF中的字段创建自定义转换器?
if(a != null && b == null) {
return "a";
}
else if(a == null && b != null) {
return "b";
}
的逻辑很简单,但如何在XAML和MVVM模式适合呢?我有一个viewmodel和一个视图(xaml-ui)。代码应该放置在视图模型中。
又饿实现逻辑的意思是说....您想要第一个条件a on和b第二个条件??
如果那是真的......
然后..
使属性与属性chnaged在你的ViewModel
public void ValidationFunction
{
if(a != null && b == null)
{
TextToDisplay ="a";
}
else if(a == null && b != null)
{
TextToDisplay ="b";
}
else
{
TextToDisplay= string.Empty;
}
}
<TextBlock Text={Binding Path=TextToDisplay}/>
不要忘记在属性的Setter中实现INotifyPropertyChanged。
需要时调用验证函数。
代码:
class MyViewModel {
string ResultStr {
get {
if (a != null && b == null)
return "a";
else if (a == null && b != null)
return "b";
}
}
}
XAML:
<TextBlock Text={Binding Path=ResultStr Mode=OneWay}/>
您可以使用A和B一MultiBinding,并在IMultiValueConverter
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource YourConverter}">
<Binding Path="A"/>
<Binding Path="B"/>
</MultiBinding/>
</TextBlock.Text>
</TextBlock>
这个问题表明MVVM应该很大程度上消除了转换器的需求 - 将逻辑放在ViewModel中不是更好吗? (这个问题不太清楚 - 也许我误解了它) – Ricibob 2012-04-13 07:53:28
这两者似乎对我有效。这一切都取决于它是一个美学还是可用性选择,在这种情况下,它属于视图(多重绑定和转换器),或者它是更“逻辑”选择(视图模型或模型)。 – 2012-04-13 08:24:08
其实并不重要。 – marko 2012-04-13 08:34:17