2012-04-13 75 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

相關問題