我有一個標籤和一個文本框,它會顯示兩個不同的值。如何爲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