EDITSet Standardwert in XAML, wenn die Bindung null ist
Dies ist kein Duplikat eines Ausweich für String-Null-Werte. Ich frage nach einem Fallback für einen komplexen Typ.
Original Frage
Dies ist ein Followup Frage auf eine Frage, die ich gestern gefragt haben:
Bind WPF Command to ViewModel property in C# XAML
Der Kernteil der akzeptierte Antwort auf mich war:
<Window.Resources>
<DataTemplate DataType="{x:Type local:SettingsPathSelectorViewModel}">
<StackPanel Orientation="Horizontal">
<TextBox Text="{Binding SettingsPath}" />
<Button
Content="..."
Command="{Binding OpenFile}"
HorizontalAlignment="Left"
MinWidth="40"
Margin="4,0,0,0"
/>
</StackPanel>
</DataTemplate>
</Window.Resources>
<Grid>
<StackPanel Orientation="Vertical">
<Label>First Path</Label>
<ContentControl Content="{Binding FirstPath}" />
</StackPanel>
</Grid>
Ein DataTemplate
wird für einen benutzerdefinierten Typ und die erstellt n a ContentControl
ist an eine Eigenschaft dieses Typs gebunden.
Das Problem ist jetzt, dass die Eigenschaft (FirstPath
10 in dem Beispiel) null
sein kann und keine UI-Elemente gerendert werden. Wie konnte ich erreichen die Steuerelemente aus dem DataTemplate
selbst zu machen, wenn die Eigenschaft null
ist als Evk schlug ich einen Converter implementiert haben:
public class PathSelectorConverter : IValueConverter
{
public object Convert(object o, Type type, object parameter, CultureInfo culture)
{
return o ?? new PathSelector();
}
public object ConvertBack(object o, Type type, object parameter, CultureInfo culture)
{
return o ?? new PathSelector();
}
}
Ich habe eine Ressource eine Instanz des Wandlers hinzugefügt mein Fenster:
<view:PathSelectorConverter x:Key="pathSelectorConverter"/>
Und fügte hinzu, es in der auf die Eigenschaft Bindung:
Aber der Konverter wird nur aufgerufen, wenn der Wert nicht null ist
Can not Stellen Sie sicher, dass es niemals null ist? – Evk
@Evk Leider nicht. Ich habe eine Liste von Elementen, aus denen Sie auswählen können, und jedes Element hat eine 'FirstPath'-Eigenschaft. Wenn die Liste der Elemente leer ist, habe ich dieses unerwünschte Verhalten. –
Dann können Sie einen Konverter verwenden, der eine Standardinstanz von SettingsPathSelectorViewModel zurückgibt, wenn der angegebene Wert null ist. – Evk