首页 > Windows开发 > 详细

WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定

时间:2019-12-18 09:22:17      阅读:82      评论:0      收藏:0      [点我收藏+]

当我们要进行性别这一属性绑定的时候,我们会发现,两个RadioButton控件都跟一个Gender属性关联。其实我们在绑定控件时还会遇到这样一个问题:属性是一个bool类型,但需要绑定控件的Visibility属性。这个问题也可以在本文介绍的方法得到解决。

控件在绑定时,是可以设置一个Converter的。Converter有两个方法,分别是Convert和ConvertBack。Convert用于将数据格式化之后,显示到控件上。而ConvertBack就是在界面端修改了控件状态,数据应该如何变化。

以下是一个比较通用的RadioButton的Converter:

    using System;
    using System.Globalization;
    using System.Windows.Data;
     
    namespace LoginDemo.ViewModel.Common
    {
        public class CheckConverter : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value == null || parameter == null)
                {
                    return false;
                }
                string checkvalue = value.ToString();
                string targetvalue = parameter.ToString();
                bool r = checkvalue.Equals(targetvalue);
                return r;
            }
     
            public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
            {
                if (value == null || parameter == null)
                {
                    return null;
                }
     
                if ((bool)value)
                {
                    return parameter.ToString();
                }
                return null;
            }
        }
    }

在XAML处,需要先增加Converter的资源:

    <Window.Resources>
        <c:CheckConverter x:Key="CheckConverter"/>
    </Window.Resources>

然后RadioButton的代码修改如下:

    <RadioButton Grid.Row="2" Grid.Column="0" Content="男" IsChecked="{Binding Gender,Mode=TwoWay,Converter={StaticResource CheckConverter},ConverterParameter=1}"/>
    <RadioButton Grid.Row="2" Grid.Column="1" Content="女" IsChecked="{Binding Gender,Mode=TwoWay,Converter={StaticResource CheckConverter},ConverterParameter=2}"/>

ViewModel里增加的代码就没什么新意了:

    /// <summary>
    /// 性别
    /// </summary>
    public int Gender
    {
        get
        {
            return obj.Gender;
        }
        set
        {
            obj.Gender = value;
            this.RaisePropertyChanged("Gender");
        }
    }

这样绑定以后,当Gender=2时,性别女的单选框会被选中;当性别男的单选框被选中后,Gender会变成1。

WPF MVVM从入门到精通6:RadioButton等一对多控件的绑定

原文:https://www.cnblogs.com/ljdong7/p/12058049.html

(0)
(0)
   
举报
评论 一句话评论(0
关于我们 - 联系我们 - 留言反馈 - 联系我们:wmxa8@hotmail.com
© 2014 bubuko.com 版权所有
打开技术之扣,分享程序人生!