2010-09-08 41 views
0

尝试使单选按钮绑定工作,但获得下面的代码运行时错误。希望单选按钮一次只能选择一个,并且它们以2种方式正确绑定。错误文字是。WPF单选按钮绑定 - 在此代码中出现错误?

<Window x:Class="testapp1.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     xmlns:l="clr-namespace:testapp1" Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <Grid.Resources> 
      <l:EnumBooleanConverter x:Key="enumBooleanConverter" /> 
     </Grid.Resources> 

     <StackPanel > 
      <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=FirstSelection}">first selection</RadioButton> 
      <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=TheOtherSelection}">the other selection</RadioButton> 
      <RadioButton IsChecked="{Binding Path=VeryLovelyEnum, Converter={StaticResource enumBooleanConverter}, ConverterParameter=YetAnotherOne}">yet another one</RadioButton> 
      <Label Content="{Binding Path=VeryLovelyEnum}" Height="28" Name="label1" /> 
     </StackPanel> 

    </Grid> 
</Window> 

和代码 “上 类型 'testapp1.MainWindow' 那 匹配指定结合 约束引发了异常的构造方法的调用”:

namespace testapp1 
{ 
    public partial class MainWindow : Window 
    { 
     public TestModel _model; 

     public MainWindow() 
     { 
      InitializeComponent(); 

      InitializeComponent(); 
      _model = new TestModel(); 
      this.DataContext = _model; 
     } 

    } 

    public enum MyLovelyEnum 
    { 
     FirstSelection, 
     TheOtherSelection, 
     YetAnotherOne 
    }; 


    public class TestModel : DependencyObject 
    { 

     public MyLovelyEnum VeryLovelyEnum 
     { 
      get { return (MyLovelyEnum)GetValue(VeryLovelyEnumProperty); } 
      set { SetValue(VeryLovelyEnumProperty, value); } 
     } 
     public static readonly DependencyProperty VeryLovelyEnumProperty = 
      DependencyProperty.Register("VeryLovelyEnum", typeof(MyLovelyEnum), typeof(TestModel), new UIPropertyMetadata(0)); 



    // from http://stackoverflow.com/questions/397556/wpf-how-to-bind-radiobuttons-to-an-enum 
    public class EnumBooleanConverter : IValueConverter 
    { 
     #region IValueConverter Members 
     public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string parameterString = parameter as string; 
      if (parameterString == null) 
       return DependencyProperty.UnsetValue; 

      if (Enum.IsDefined(value.GetType(), value) == false) 
       return DependencyProperty.UnsetValue; 

      object parameterValue = Enum.Parse(value.GetType(), parameterString); 

      return parameterValue.Equals(value); 
     } 

     public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture) 
     { 
      string parameterString = parameter as string; 
      if (parameterString == null) 
       return DependencyProperty.UnsetValue; 

      return Enum.Parse(targetType, parameterString); 
     } 
     #endregion 
    } 

} 

按钮&标签是否来自我之前的测试 - 我只是乐ft in ...

回答

2

以下声明使用整数而不是默认枚举值。可能是您的实例的问题...

public static readonly DependencyProperty VeryLovelyEnumProperty = 
      DependencyProperty.Register("VeryLovelyEnum", typeof(MyLovelyEnum), typeof(TestModel), new UIPropertyMetadata(0)); 

尝试类似...

public static readonly DependencyProperty VeryLovelyEnumProperty = 
      DependencyProperty.Register("VeryLovelyEnum", typeof(MyLovelyEnum), typeof(TestModel), new UIPropertyMetadata(MyLovelyEnum.FirstSelection));