2012-04-13 12 views
0

Ich habe ein Label und ein Textfeld und es werden zwei verschiedene Werte angezeigt.Wie erstelle ich einen benutzerdefinierten Konverter für Felder in WPF?

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

Die Logik ist ganz einfach, aber wie diese passen in XAML und MVVM-Muster? Ich habe ein Viewmodel und eine Ansicht (xaml-ui). Der Code sollte wahrscheinlich im Viewmodel platziert werden.

Antwort

2

Youe bedeuten sagen .... Sie möchten a für den ersten Zustand anzeigen an und b für den zweiten Zustand ??

wenn das ist wahr ...

dann ..

eine Immobilie mit der Immobilie Benachrichtigung in Ihrem Ansichtsmodell chnaged

-Code in Ihrem Ansichtsmodell

public void ValidationFunction 
{ 
    if(a != null && b == null) 
    { 
      TextToDisplay ="a"; 
    } 
    else if(a == null && b != null) 
    { 
      TextToDisplay ="b"; 
    } 
    else 
    { 
      TextToDisplay= string.Empty; 
    } 
} 

Bindung in XAML

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

Vergessen Sie nicht, INotifyPropertyChanged in Setter der Eigenschaft zu implementieren.

Bei Bedarf die Validierungsfunktion aufrufen.

0

Code:

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

Sie können eine MultiBinding auf A und B verwenden und implementieren Sie Ihre Logik in einem IMultiValueConverter

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

Die Frage stellte MVVM, die die Notwendigkeit für Konverter weitgehend beseitigen sollte - ist es nicht besser, Logik in ViewModel zu setzen? (die Frage nicht so klar - vielleicht habe ich es missverstanden) – Ricibob

+1

Die beiden scheint für mich gültig. Alles hängt davon ab, ob es sich um eine ästhetische oder benutzerfreundliche Wahl handelt. In diesem Fall gehört es zur Ansicht (Multibinding und Konverter) oder wenn es eine "logischere" Wahl ist (Ansichtsmodell oder Modell). –

+0

Eigentlich ist das nicht so wichtig. – marko

Verwandte Themen