XAML-Bedingte Bindung im DataTemplate
Habe ich ein DataTemplate für ein ListView-Steuerelement in XAML:
<DataTemplate x:Key="ResultItemTemplate">
<Grid Grid.Column="2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="auto" />
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="auto" />
<RowDefinition Height="*" />
<RowDefinition Height="auto" />
</Grid.RowDefinitions>
<TextBlock Text="{Binding Name}"
Margin="0,10,20,0"
Grid.Column="0"
Grid.Row="0"/>
<TextBlock Text="{Binding TimeStamp}"
Margin="0,10,10,0"
Grid.Column="1"
Grid.Row="0"/>
<TextBlock Text="{Binding Text}"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="1"
TextWrapping="Wrap"
Height="auto"
Margin="0,0,10,10"/>
<TextBlock Text="{Binding Additional}"
Grid.Column="0"
Grid.ColumnSpan="2"
Grid.Row="2"
TextWrapping="Wrap"
Height="auto"
Margin="0,0,10,20" />
</Grid>
</DataTemplate>
Also die Anwendung dieses DataTemplate zu meinem ListView, die Zusätzliche TextBlock-nicht in jeder Liste.
Aber der Abstand existiert für die Zusätzlichen TextBlock, ob das DataBinding-Wert null ist oder nicht.
Wie bekomme ich den text-block nur Hinzugefügt werden, wenn der "Zusätzliche" Bindung-Eigenschaft vorhanden ist?
- Konnte Sie binden die 'Visibility' - Eigenschaft des TextBlock der gleichen Eigenschaft in (Zusätzliche) und schreiben Sie Ihre eigene IValueConverter
Du musst angemeldet sein, um einen Kommentar abzugeben.
Dies ist Ihr Konverter:
- Und das ist der XAML:
setzen Sie diese in Ihrem root-element:
und dann diese in Ihren Ressourcen:
Zusammenbruch der
TextBlock
wennAdditional
Eigenschaft ist nicht verfügbar, versuchen Sie zu bindenTextBlock
'sVisiblity
Eigenschaft mitTargetNullValue
eingestelltCollapsed
. Ich würde vorschlagen, so etwas wie dieses :Aber stellte sich heraus, es funktioniert nicht für mich, für einen Grund, weiß ich nicht. Aber die Bindung auf diese Weise hat der trick :
Fragen :
Basierend auf Flat Eric ' s Vorschlag - Felder gebunden werden können die IsVisible-Eigenschaft:
Wenn der Wert null das Label ist ausgeblendet.
Können Sie versuchen, verwenden Sie die
BindingBase.TargetNullValue
für diese:Vorher zu erstellen, die eine Eigenschaft
MyMargin
vonThickness?
Typ mit einigen default-Wert. Wenn der Wert MyMargin werden null-Wert, dann den Wert nehmen, vonTargetNullValue
.Können Sie den Stil der textblock und die Sichtbarkeit zu reduzieren oder sichtbar, basierend auf dem Wert der Bindung. Letzteres kann mit datatriggers.
Es wird einfacher sein, wenn Sie eine Eigenschaft erstellen, ShowAdditional, die true oder false zurückgibt, basierend auf dem Wert der Bindung. Auf diese Weise können Sie leicht anpassen, wenn es zu zeigen oder nicht.
Wie folgt:
Mit Sichtbarkeit eingestellt zusammengebrochen, das gesamte element wird zusammengebrochen, einschließlich Rand.