Radiobutton wpf绑定

时间:2012-05-04 15:43:47

标签: wpf radio-button master-detail

我有一个master-detail wpf应用程序。 “master”是数据网格,“detail”是两个单选按钮。根据行选择,在“详细信息”部分中检查单选按钮。

我使用inttoboolean转换器以下列方式绑定我的单选按钮。 xaml:

<StackPanel Margin="2">
  <RadioButton Margin="0,0,0,5" Content="In Detail" IsChecked="{Binding Path=itemselect.OutputType, Converter ={StaticResource radtointOTSB}, ConverterParameter= 0}"/>
  <RadioButton Content="In Breif" IsChecked="{Binding Path=itemselect.OutputType, Converter ={StaticResource radtointOTSB}, ConverterParameter= 1}"/>
</StackPanel>

在视图模型中:

public class radtointOTSB : IValueConverter
{
    object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        int OTint = Convert.ToInt32(value);
        if (OTint == int.Parse(parameter.ToString()))
            return true;
        else
            return false;
    }

    object IValueConverter.ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return parameter;
    }
}

我的实现适用于datagrid中的前几个选项。突然之间,我的单选按钮都没有被选中。

我不知道为什么会这样,任何建议都会受到欢迎。

提前致谢。

1 个答案:

答案 0 :(得分:4)

搜索绑定多个RadioButtons的问题 - 有足够的抱怨。基本上绑定不会收到False的值,因为它没有被传递给Dependency Property ..等等

尝试使用以下类而不是常规的RadioButton,绑定到IsCheckedExt,因为它强制复选框的IsChecked值更新。

public class RadioButtonExtended : RadioButton
{
    public static readonly DependencyProperty IsCheckedExtProperty =
        DependencyProperty.Register("IsCheckedExt", typeof(bool?), typeof(RadioButtonExtended),
                                    new FrameworkPropertyMetadata(false, FrameworkPropertyMetadataOptions.Journal | FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, IsCheckedRealChanged));

    private static bool _isChanging;

    public RadioButtonExtended ()
    {
        Checked += RadioButtonExtendedChecked;
        Unchecked += RadioButtonExtendedUnchecked;
    }

    public bool? IsCheckedExt
    {
        get { return (bool?)GetValue(IsCheckedExtProperty); }
        set { SetValue(IsCheckedExtProperty, value); }
    }

    public static void IsCheckedRealChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        _isChanging = true;
        ((RadioButtonExtended)d).IsChecked = (bool)e.NewValue;
        _isChanging = false;
    }

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

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