2010-12-29 16 views
3

Ich habe zwei Radiobuttons.ungeprüft wpf Radiobuttons

One (rb1) auf eine Eigenschaft meiner ViewModel binded. Wenn die Eigenschaft wahr ist, wird rb1 überprüft, wenn die Anwendung geladen wird. Wenn die Eigenschaft falsch ist, ist rb1 deaktiviert (das stimmt).

Aber im letzten Fall sind beide Radiobuttons deaktiviert, und ich brauche den zweiten Radiobutton (rb2) wird überprüft, wenn die Eigenschaft falsch ist. Wie könnte ich das tun ??

+0

Also, Sie haben zwei Radio-Buttons. Sind beide an dieselbe Eigenschaft gebunden? Und wenn der Wert der Eigenschaft wahr ist, brauchen Sie rb1 checked und rb2 unchecked und wenn es falsch ist, brauchen Sie rb1 unchecked und rb2 checked? – decyclone

+0

Welche Version von .NET verwenden Sie? Es gab ein Problem mit Datenbindungsradios, das in .NET 4. –

Antwort

0

Das Problem, das Sie stoßen, ist, dass das Databinding „verloren“. Lassen Sie mich Matt Thalman zitieren:

Der Klick würde den UI Zustand die Tasten richtig ändern (zum Beispiel Klick Bar würde deaktivieren Foo und Scheck Bar). Aber ich bemerkte, dass, wenn der zugrundeliegende Wert von IsFoo und IsBar jemals nach diesem Punkt geändert wurde, die Schaltflächen ihren IsChecked Zustand nicht aktualisiert haben. Mit Hilfe der Snoop-Tool entdeckt ich, dass der IsChecked Zustand nach auf eine der Schaltflächen Klick manuell seinen Zustand eingestellt hatte. Sobald eine Abhängigkeitseigenschaft manuell festgelegt wurde, verliert es seine Bindung. Diese ist, warum der IsChecked Zustand wurde nicht geändert werden, wenn die Eigenschaften an wurden aktualisiert gebunden zu sein.

Eine einfache Lösung ist es, die Radiobutton-Klasse, Unterklasse:

public class DataBoundRadioButton : RadioButton 
{ 
    protected override void OnChecked(RoutedEventArgs e) 
    { 
      // Do nothing. This will prevent IsChecked from being manually set and overwriting the binding. 
    } 

    protected override void OnToggle() 
    { 
      // Do nothing. This will prevent IsChecked from being manually set and overwriting the binding. 
    } 
} 

Siehe this blog entry für weitere Details.

+0

AFAIK behoben wurde, dieser Fehler wurde in .NET 4.0 behoben - Sie sollten in der Lage sein, RadioButtons Werte zu binden, ohne dieses Problem jetzt zu lösen. –