如何解决我的绑定转换有什么问题?
| 我有单选按钮,我想定义单选按钮.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,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,System.Globalization.CultureInfo culture )
{
return value == Visibility.Visible ; // yup,it\'s a boolean
}
}
它应该工作得更好。
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 dio@foxmail.com 举报,一经查实,本站将立刻删除。