2017-06-28 6 views
0

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; 
     } 
+0

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. –

+0

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 –

+0

Ich legte das 'SelectedItem' der Combobox auf' null', und es funktioniert! Ist das der richtige Weg, um den Zielwert zu löschen? –

Antwort

0

Verwenden Sie den Bindungsmodus OneWay anstelle von OneTime, damit Änderungen im Modell in der Benutzeroberfläche angezeigt werden.

Leider ist das in Ihrem Fall nicht genug, da Sie die Eigenschaft manuell einstellen. Dies zerstört deine Bindungen! Löschen Sie stattdessen den Text in den gebundenen Werten.

+0

geändert und immer noch keine Änderung –

+0

@MohamedAhmed Oh, ich habe Ihren klaren Knopf nicht gesehen. Sie können den Text nicht so ändern! Siehe meine Bearbeitung – BradleyDotNET

+0

Ist die 'Text' -Eigenschaft nicht der gebundene Wert und so lösche ich den Wert ?! –

Verwandte Themen