Ich habe eine Bool-Eigenschaft in meinem ViewModel namens IsConnected
, und ich möchte es an einen TextBlock in meinem MainWindow binden. Anstatt den Textblock true
oder false
lesen zu lassen, brauche ich stattdessen Connected
oder Disconnected
. Verzeih mir, weil ich neu bei WPF bin. Wenn mir jemand einen Vorsprung verschaffen könnte, könnte ich es von dort aus nehmen, aber ich bin mir nicht sicher, wie ich herausfinden soll, was ich brauche.WPF-Datenbindung und -formatierung
Antwort
ich in der Regel nur lieber auf eine Eigenschaft die Ansicht Modell hinzufügen (Ich mag nicht wirklich Wertwandler), aber hier eine einfache Art und Weise ist, zu erreichen, was Sie versuchen, mit einem Stil zu tun:
<TextBlock>
<TextBlock.Style>
<Style TargetType="TextBlock">
<Setter Property="Text" Value="Connected"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="False">
<Setter Property="Text" Value="Disconnected"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
bearbeiten
Beachten Sie, dass, sobald Sie zur Verwendung von Daten-Trigger verwendet, können Sie alle Arten von Änderungen an Ihrer Ansicht machen, ohne Ihre Ansicht Modell zu berühren. Zum Beispiel:
<StackPanel>
<Image Source="images\connected.png">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="True">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
<Image Source="images\disconnected.png">
<Image.Style>
<Style TargetType="Image">
<Setter Property="Visibility" Value="Collapsed"/>
<Style.Triggers>
<DataTrigger Binding="{Binding IsConnected}" Value="False">
<Setter Property="Visibility" Value="Visible"/>
</DataTrigger>
</Style.Triggers>
</Style>
</Image.Style>
</Image>
</StackPanel>
Der einfachste Weg ist wahrscheinlich, einen benutzerdefinierten Konverter zu erstellen, der Ihren Bool-Wert in eine Zeichenfolge konvertiert. Suchen Sie überall nach IValueConverter und/oder WPF.
public class BoolToConnectedConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
if((bool)value)
return "Connected";
else
return "Disconnected";
}
public object ConvertBack(object value, Type targetType, object parameter,
System.Globalization.CultureInfo culture)
{
throw new NotSupportedException();
}
#endregion
}
hinzufügen xmlns:
xmlns:converter="clr-namespace:MyProjectNameSpace"
Add Ressource XAML (ändern, was auch immer Element benötigt)
<Window.Resources>
<converter:BoolToConnectedConverter x:Key="connectedConverter" />
</Window.Resources>
in XAML:
<TextBlock Text={Binding IsConnected, Converter={StaticResource connectedConverter}" />
Bitte fügen Sie weitere Details hinzu. – ocodo
Die einzige Änderung, die ich vornehmen würde, ist, den Text aus einer Zeichenfolge-Ressourcendatei abzurufen.Auf diese Weise können Sie einen netten generischen 'BoolToString'-Konverter erstellen und den Parameter converter verwenden, um das Präfix des zu verwendenden Ressourcenschlüssels zu übergeben (Präfix + bool value == vollständiger Schlüssel zum Abrufen der Zeichenfolge aus der Ressource). – slugster
@Slugster, stimme ich damit überein. Ich habe einen Moment darüber nachgedacht, aber aus Gründen der Einfachheit dieses Beispiel verworfen. – ThomasAndersson
Sie können dies tun, in zwei Möglichkeiten
1) einen Konverter
2) Ändern Sie die Funktion in der Ansichtsmodell, so dass sie die gewünschte Zeichenfolge anstelle eines Bool zurückgibt
Der einfachste Weg # 2 ist, aber wenn Sie wirklich brauchen, den Bool Wert woanders in deinem code gehst du mit # 1 (google converter und wpf)
Schau dir Wertewandler an.
http://www.wpftutorial.net/ValueConverters.html
public class BoolToConnectedConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
var isConnected = (bool)value;
return isConnected ? "Connected" : "Disconnected";
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
throw new NotImplementedException("Not required for read-only values");
}
}
In XAML:
<Window.Resources>
<l:BoolToConnectedConverter x:Key="boolToConnectedConverter" />
</Window.Resources>
<Grid>
<Label Content="{Binding IsConnected, Converter={StaticResource boolToConnectedConverter}}" />
</Grid>
Mit Ansichtsmodell, schreiben Sie zwei Eigenschaft Verpackung, und benachrichtigen Änderungen in den Immobilien.
Wenn Sie also den Wert ändern, wird die Zeichenfolgendarstellung aktualisiert und an Steuerelemente gebunden, während Sie die bool-Eigenschaft im Code weiterhin verwenden können.
public string IsConnectedStr{
get{
return IsConnected?"Connected":"Disconnected";
}
}
public bool IsConnected{
get{
return _isConnected;
}
set{
_isConnected=value;
PropertyChanged("IsConnected");
PropertyChanged("IsConnectedStr");
}
}
- 1. Excel Merge und Formatierung
- 2. Code-Formatierung und Intelassist
- 3. Kopieren Formel und Formatierung
- 4. Telefonnummer Validierung und Formatierung
- 5. Python POST Codierung und Formatierung
- 6. R Shiny- Formatierung über Formatierung
- 7. bedingte Formatierung oder Formatierung mit VBA
- 8. Namen Formatierung
- 9. HTML-Formatierung
- 10. KendoUI Formatierung von Datum und Uhrzeit Feld
- 11. String.format() und DecimalFormat nicht tatsächlich Formatierung
- 12. console.log Formatierung für Daten und Objekte
- 13. Intellij idea Javascript Formatierung und Hervorhebung
- 14. Visual Studio Code CSS Vertiefung und Formatierung
- 15. Formatierung Datum in Mongojs und angularjs App
- 16. PHP und Senden von Mail-Formatierung
- 17. HTML-Formatierung mit Python 2.7 und BS4
- 18. Datetime Formatierung in R3.0.3 und R3.1.3
- 19. Matplotlib anwenden Xaxis und Yaxis Nummer Formatierung
- 20. Verwendung und Formatierung eines RSS-Feeds
- 21. SharePoint 2010 und erweiterte bedingte Formatierung
- 22. Jquery und Formatierung eines Textfelds zum Taggen?
- 23. Django und Heuhaufen mit Whoosh, Suche Formatierung
- 24. Python String Formatierung und String Multiplikation Oddity
- 25. Numerische und bedingte Formatierung mit rhandsontable
- 26. Sprintf mit Zeigern, Konstanten und String-Formatierung
- 27. SQL Datum Formatierung und Sortierung Ausgabe
- 28. php Formatierung neuer Zeilen und Abstände
- 29. jqGrid benutzerdefinierte Formatierung und Toolbar Filterung
- 30. Date.js vs Moment.js (und serverseitige Formatierung)
Dies scheint eine bessere Lösung für das Problem zu sein. Ich denke nicht wirklich, dass ein Konverter eine so gute Idee ist. Stile scheinen besser zu passen und ich muss keine Helfereigenschaft erstellen, um Zeichenfolgenwerte zu generieren. Ich würde meine ViewModel-Daten lieber so behalten, wie sie eigentlich sein sollen. – jlafay
Hat super funktioniert und vielen Dank für das Bild Beispiel, weil ich etwas ähnliches aus meiner Sicht für eine andere Eigenschaft tun möchte. – jlafay