2012-05-04 19 views
1

私はmaster-detail wpfアプリケーションを持っています。 「マスター」はデータグリッド、「詳細」は2つのラジオボタンです。行の選択に基づいて、ラジオボタンが「詳細」セクションでチェックされます。ラジオボタンwpfバインディング

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

私の実装では、データグリッドでの最初の数の選択に適しています。突然、ラジオボタンが選択されません。

私はなぜそれが起こるかについての手掛かりはありませんが、どんな提案も歓迎されます。

ありがとうございます。

答えて

3

複数のRadioButtonをバインドする際の問題を検索します - 十分な苦情があります。基本的には、依存関係プロパティなどに渡されないため、Falseの値は受け取りません。

通常の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

私は検索で他のすべてのソリューションを試しましたが、これは私のために働いた唯一のものでした。感謝万円。 –