2012-04-13 52 views
0

我有一个标签和一个文本框,它会显示两个不同的值。如何为WPF中的字段创建自定义转换器?

if(a != null && b == null) { 
    return "a"; 
} 
else if(a == null && b != null) { 
    return "b"; 
} 

的逻辑很简单,但如何在XAML和MVVM模式适合呢?我有一个viewmodel和一个视图(xaml-ui)。代码应该放置在视图模型中。

回答

2

又饿实现逻辑的意思是说....您想要第一个条件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; 
    } 
} 

绑定在XAML

<TextBlock Text={Binding Path=TextToDisplay}/> 

不要忘记在属性的Setter中实现INotifyPropertyChanged。

需要时调用验证函数。

0

代码:

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}/> 
1

您可以使用A和B一MultiBinding,并在IMultiValueConverter

<TextBlock> 
    <TextBlock.Text> 
    <MultiBinding Converter="{StaticResource YourConverter}"> 
     <Binding Path="A"/> 
     <Binding Path="B"/> 
    </MultiBinding/> 
    </TextBlock.Text> 
</TextBlock> 
+0

这个问题表明MVVM应该很大程度上消除了转换器的需求 - 将逻辑放在ViewModel中不是更好吗? (这个问题不太清楚 - 也许我误解了它) – Ricibob 2012-04-13 07:53:28

+1

这两者似乎对我有效。这一切都取决于它是一个美学还是可用性选择,在这种情况下,它属于视图(多重绑定和转换器),或者它是更“逻辑”选择(视图模型或模型)。 – 2012-04-13 08:24:08

+0

其实并不重要。 – marko 2012-04-13 08:34:17

相关问题