TwitterFacebookGoogleYouTubeEmailRSS

RadioButtons und Binding in .NET 3.5

Im .NET-Framework 3.5 haben RadioButtons eine merkwürdige Eigenschaft. Sie überschreiben das Binding der IsChecked Property beim Uncheck. Da dies nur in den seltensten Fällen gewollt sein kann, dass sich das Binding verabschiedet, wurde dies im .NET 4.0 behoben. Aber auch unter .NET 3.5 kann der Fehler mit Hilfe eines kleinen Workarounds umgangen werden. Hierzu muss nur eine eigene RadioButton-Klasse erstellt werden, welche ein paar Dinge mit sich bringt. Anschließend wird in der Anwendung das Binding nicht mehr bei der Property „IsChecked“ sondern bei der Property „IsCheckedBinding“ gesetzt. Hier der benötigte Code zum eigenen Control:

using System.Windows;
using System.Windows.Controls;

public class DataBoundRadioButton : RadioButton
{
    private static bool _isChanging;

    public static readonly DependencyProperty IsCheckedBindingProperty =
            DependencyProperty.Register("IsCheckedBinding", typeof(bool), typeof(DataBoundRadioButton),
            new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsCheckedBindingChanged));
        
    public bool IsCheckedBinding
    {
        get { return (bool) GetValue(IsCheckedBindingProperty); }
        set { SetValue(IsCheckedBindingProperty, value); }
    }

    public DataBoundRadioButton()
    {
        Checked += OnChecked;
        Unchecked += OnUnchecked;
    }

    private void OnChecked(object sender, RoutedEventArgs e)
    {
        if (!_isChanging)
            IsCheckedBinding = true;
    }

    private void OnUnchecked(object sender, RoutedEventArgs e)
    {
        if (!_isChanging)
            IsCheckedBinding = false;
    }

    private static void IsCheckedBindingChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        _isChanging = true;
        ((DataBoundRadioButton)d).IsChecked = (bool)e.NewValue;

        _isChanging = false;
    }
}

Hinterlasse ein Kommentar.

CyberChimps

Cookies erleichtern die Bereitstellung unserer Dienste. Mit der Nutzung unserer Webseite erklären Sie sich damit einverstanden, dass wir Cookies verwenden. Informationen zum Datenschutz

Die Cookie-Einstellungen auf dieser Website sind auf "Cookies zulassen" eingestellt, um das beste Surferlebnis zu ermöglichen. Wenn du diese Website ohne Änderung der Cookie-Einstellungen verwendest oder auf "Akzeptieren" klickst, erklärst du sich damit einverstanden.

Schließen