zoukankan      html  css  js  c++  java
  • 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。

  • 相关阅读:
    前端下载图片到本地
    小程序复制文本
    小程序的分享
    vue简单的父子组件之间传值
    git新的远程分支同步到本地
    C#使用RabbitMq队列(Sample,Work,Fanout,Direct等模式的简单使用)
    别再眼高手低了! 这些Linq方法都清楚地掌握了吗?
    Asp.NetCore 3.1 使用AutoMapper自动映射转换实体 DTO,Data2ViewModel
    .NetCore使用Redis,StackExchange.Redis队列,发布与订阅,分布式锁的简单使用
    core的 Linq基本使用,简单模拟数据库多表的左右内连接的测试
  • 原文地址:https://www.cnblogs.com/ljdong7/p/12058049.html
Copyright © 2011-2022 走看看