如何为WPF中的字段制作自定义转换器?

时间:2012-04-13 07:19:31

标签: c# wpf xaml mvvm

我有一个标签和一个文本字段,它会显示两个不同的值。

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

逻辑非常简单,但如何在xaml和mvvm-pattern中使用它?我有一个viewmodel和一个视图(xaml-ui)。代码应该放在viewmodel中。

3 个答案:

答案 0 :(得分:2)

你的意思是说....你想为第一个条件显示 a 而第二个条件是 b

如果这是真的......

然后..

在ViewModel

中创建一个包含Property chnaged notification的属性

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 of property中实现INotifyPropertyChanged。

在需要时调用验证功能。

答案 1 :(得分:1)

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

中实施您的逻辑
<TextBlock>
  <TextBlock.Text>
    <MultiBinding Converter="{StaticResource YourConverter}">
      <Binding Path="A"/>
      <Binding Path="B"/>
    </MultiBinding/>
  </TextBlock.Text>
</TextBlock>

答案 2 :(得分: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}/>