我的绑定转换有什么问题?

| 我有单选按钮,我想定义单选按钮.isChecked状态和某些堆栈面板的可见性之间的绑定,所以我写了这个convert方法:
 public class RadioBtnState2Visible : IValueConverter
{
    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return ( bool )value == true ? Visibility.Visible : Visibility.Collapsed;
    }

    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return ( Visibility )value == Visibility.Visible ? true : false;
    }
}
然后进行绑定-xaml:
 <local:PageEx.Resources>
       <local:RadioBtnState2Visible x:Key=\"Convert\" />
 </local:PageEx.Resources>


 <RadioButton x:Name=\"MyRadioBtn1\" GroupName=\"group1\" />
 <RadioButton x:Name=\"MyRadioBtn2\" GroupName=\"group1\" />

  <StackPanel Visibility=\"{Binding ElementName=MyRadioBtn1, Path=IsChecked, Converter={StaticResource Convert}}\" />
但是什么都行不通! 堆栈面板的可见性状态始终为可见! 我做错了什么?     
已邀请:
        只需少量更改即可使您的代码工作。我使转换器成为页面资源:
<UserControl.Resources>
    <local:RadioBtnState2Visible x:Key=\"Convert\" />
</UserControl.Resources>
我还应该提到,我还必须在堆栈面板中实际放一些东西,以查看更改,因为默认情况下它不会崩溃:)我假设您实际上在真正的堆栈面板中有内容。 只是为了解释这里发生了什么。通过在资源声明中添加\“ local:\”,实际上是在封装资源实例,而不更改当前资源。 \“ Convert \”引用它不起作用,因为它无法在期望找到的位置找到资源。     
        这是Silverlight还是WPF?您可能需要为绑定指定模式。模式=单向应该工作。     
        实际上,RadioButon.IsChecked不是
bool
,而是
Nullable<bool>
1 因此,您的代码应为:
 public class RadioBtnState2Visible : IValueConverter
{
    public object Convert( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return   (value == true) ? Visibility.Visible : Visibility.Collapsed; // the explicit check to true is needed because of  case value=null
    }

    public object ConvertBack( object value, Type targetType, object parameter, System.Globalization.CultureInfo culture )
    {
        return value == Visibility.Visible ; // yup, it\'s a boolean
    }
}
它应该工作得更好。     

要回复问题请先登录注册