Impossibile aggiornare la proprietà della casella di testo utilizzando DataBinding
-
06-07-2019 - |
Domanda
Ho una finestra personalizzata con due proprietà di depencency: Boolean? ValidationStatus e stringa ValidationMessage. L'associazione di queste proprietà funziona correttamente ma il trigger non sembra essere attivato quando questi valori cambiano. Cosa sto sbagliando?
<TextBlock x:Name="validationTextBox"
Grid.Row="1"
Grid.ColumnSpan="2"
Text="{Binding ElementName=_this, Path=ValidationMessage}"
TextAlignment="Center"
Background="Green">
<TextBlock.Style>
<Style>
<Style.Triggers>
<DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}">
<Setter Property="Panel.Background" Value="Red"/>
<Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
Soluzione
I setter di stile non sovrascrivono le impostazioni degli attributi locali. Pertanto, i valori del trigger di dati vengono ignorati perché sono state specificate le proprietà Text e Background su TextBlock. Per risolvere il problema, impostare i valori predefiniti di queste proprietà nello stile, come mostrato nel seguente codice:
<TextBlock x:Name="validationTextBox"
Grid.Row="1"
Grid.ColumnSpan="2"
TextAlignment="Center">
<TextBlock.Style>
<Style>
<Setter Property="TextBox.Text" Value="{Binding ElementName=_this, Path=ValidationMessage}"/>
<Setter Property="TextBox.Background" Value="Green"/>
<Style.Triggers>
<DataTrigger Value="False" Binding="{Binding ElementName=_this, Path=ValidationStatus}">
<Setter Property="TextBox.Background" Value="Red"/>
<Setter Property="TextBox.Text" Value="Outer checkbox is not checked"/>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow