2012-05-04 2 views
1

У меня есть приложение wpf master-detail. «Мастер» - это набор данных, а «деталь» - это две кнопки-переключатели. На основе выбора строки переключатели проверяются в разделе «подробно».Radiobutton wpf binding

Я связываю свою радио-кнопку следующим образом, используя конвертер 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. И вдруг ни один из моих переключателей не выбран.

У меня нет подсказки о том, почему это происходит, любое предложение приветствуется.

Заранее спасибо.

ответ

3

Поиск проблем с привязкой нескольких RadioButtons - там достаточно жалоб. В основном привязка не получит значение False, потому что оно не передается в свойство Dependency. Etc и т. Д.

Попробуйте использовать следующий класс вместо обычного 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; 
    } 
} 
+0

Спасибо большое, что сработало для меня. – maran87

+1

Я пробовал все остальные решения в Поиске, и это был единственный, который работал на меня. Бесконечно благодарен. –