Ich muss eine Gruppe von Textfeldern mit einigen Daten aus der Combobox binden, aber ich möchte keine Änderungen an den TextBoxen auf die ItemsSource
der Combobox widerspiegeln, also setze ich den Binding-Modus auf OneTime, es funktioniert gut , aber ich habe eine Schaltfläche, um den Inhalt der Textfelder löscht, wenn darauf geklickt wird es ihnen klar hält, auch wenn ich ein Element aus der Combobox wählen:Unidirektionale Bindung mit TextBoxes programmatisch?
XAML:
<Grid Name="mGrd" DataContext="{Binding ElementName=cmbBooks, Path=SelectedItem}" Grid.Column="1">
<Grid.ColumnDefinitions>
<ColumnDefinition/>
<ColumnDefinition/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
<RowDefinition/>
</Grid.RowDefinitions>
<ComboBox Name="cmbBooks" Grid.ColumnSpan="2" DisplayMemberPath="Title"/>
<Label Grid.Row="1">Id</Label>
<TextBox Grid.Row="1" Grid.Column="1" Name="txtId" Text="{Binding Path=Id, Mode=OneTime}"/>
<Label Grid.Row="2">Title</Label>
<TextBox Grid.Column="1" Grid.Row="2" Name="txtTitle" Text="{Binding Path=Title, Mode=OneTime}"/>
<Label Grid.Row="3">#Pages</Label>
<TextBox Grid.Column="1" Grid.Row="3" Name="txtPCount" Text="{Binding Path=PagesCount, Mode=OneTime}"/>
<Label Grid.Row="4">Is Published</Label>
<CheckBox Grid.Column="1" Grid.Row="4" VerticalAlignment="Center" Name="chkPblshd" IsChecked="{Binding Path=IsPublished, Mode=OneTime}"/>
<StackPanel Grid.Row="5" Orientation="Horizontal">
<Button Name="btnClear" Click="btnClear_Click" Background="Red" Foreground="White" FontWeight="Bold" Margin="2">X</Button>
<Button Name="btnAddBook" Click="btnAddBook_Click">Add new Book</Button>
</StackPanel>
</Grid>
Schaltfläche löschen:
private void btnClear_Click(object sender, RoutedEventArgs e)
{
txtId.Text = txtPCount.Text = txtTitle.Text = "";
chkPblshd.IsChecked = false;
}
Angenommen, Ihre Originalbindung ist mit einem Quellmodell verknüpft, stimme ich der unten angegebenen Antwort zu. Sie sollten die Bindung an "OneWay" festlegen und die Quelleigenschaft löschen, nicht die Zieleigenschaft. Dadurch wird auch die Zieleigenschaft gelöscht, ohne die Bindung zu zerstören. –
Wenn Sie aus irgendeinem Grund die Bindung zerstören und später neu erstellen müssen, gibt es keinen Mangel an Fragen mit Antworten zu Stack Overflow, die genau dieses Szenario adressieren. Beispiel: https://stackoverflow.com/questions/2938656/binding-properties-in-code-behind, https://stackoverflow.com/questions/10131637/binding-string-property-in-code-behind-textblock und https://stackoverflow.com/questions/4966967/wpf-how-to-set-checkbox-ischecked-binding-in-code-behind –
Ich legte das 'SelectedItem' der Combobox auf' null', und es funktioniert! Ist das der richtige Weg, um den Zielwert zu löschen? –