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


    当我们要进行性别这一属性绑定的时候,我们会发现,两个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。

  • 相关阅读:
    selenium--启动不同的浏览器
    selenium--文件下载
    selenium--常用的获取元素属性
    Python读取yaml文件
    python读Excel方法(xlrd)
    Python--unittest框架
    Python--os模块
    git fork后提交pull request到原作者,别人的pull request我们要怎样merge融合
    GitHub fork的使用
    4.Factory Pattern(工厂模式)
  • 原文地址:https://www.cnblogs.com/ljdong7/p/12058049.html
Copyright © 2020-2023  润新知