zoukankan      html  css  js  c++  java
  • WPF IValueConverter and IMultiValueConverter

    1. 实现DataGrid column的显示和隐藏功能;

      (1). 定义ContextMenu ,该ContextMenu仅可使用于DataGrid的DataGridColumnHeader;

                <ContextMenu x:Key="StudyDataGridHeaderContextMenu" ItemsSource="{Binding Columns, 
                    RelativeSource={RelativeSource AncestorLevel=1, AncestorType={x:Type DataGrid}, Mode=FindAncestor}}">
                    <ContextMenu.ItemTemplate>
                        <DataTemplate>
                            <CheckBox Content="{Binding Header,UpdateSourceTrigger=PropertyChanged}" 
                                      IsChecked="{Binding Path=Visibility,Mode=TwoWay,
                                UpdateSourceTrigger=PropertyChanged,Converter={StaticResource DataGridColumnVisibilityConvert}}"/>
                        </DataTemplate>
                    </ContextMenu.ItemTemplate>
                </ContextMenu>

      (2). 自定义显示隐藏的制转换器;

    public class DataGridColumnVisibility : IValueConverter
        {
            public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                bool flag = false;
                Visibility vis = (Visibility)value;
                switch (vis)
                {
                    case Visibility.Hidden:
                        flag = false;
                        break;
                    case Visibility.Visible:
                        flag = true;
                        break;
                    default:
                        break;
                }
                return flag;
            }
    
            public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
            {
                bool flag = System.Convert.ToBoolean(value);
                if (flag)
                {
                    return Visibility.Visible;
                }
                else
                {
                    return Visibility.Hidden;
                }
            }
        }

    2. 在实现DataGridColumn Filter 功能时,可以采用在DataGrid的外部(列头上)绑定对应的TextBox控件,并设置其样式与DataGridColumn基本一致,绑定宽度的方式来实现;

      (1). 绑定TextBox;

    <TextBox  x:Name="txt2" Style="{StaticResource textBoxStyle}" Grid.Column="1"  VerticalAlignment="Top"  
                                         Foreground="Indigo" TabIndex="0" BorderThickness="1" Text="{Binding Data_idFilter_text, UpdateSourceTrigger=PropertyChanged}"
                                         HorizontalAlignment="Left" Visibility="{Binding Visibility,ElementName=studyID}">
                                    <TextBox.Width>
                                        <MultiBinding Converter="{StaticResource VisibilityToWidthConverter}">
                                            <Binding Path="Visibility" ElementName="studyID"></Binding>
                                            <Binding Path="ActualWidth" ElementName="studyID"></Binding>
                                        </MultiBinding>
                                    </TextBox.Width>
                                    <i:Interaction.Triggers>
                                        <i:EventTrigger EventName="TextChanged">
                                            <i:InvokeCommandAction Command="{Binding LoadDataCommand}"/>
                                        </i:EventTrigger>
                                    </i:Interaction.Triggers>
    </TextBox>

      (2). 自定义多值转换器;

        class VisibilityToWidthConverter : IMultiValueConverter
        {
            public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
            {
                Visibility vis = (Visibility)values[0];
                double result = double.MinValue;
                switch(vis)
                {
                    case Visibility.Hidden:
                        result = 0;
                        break;
                    case Visibility.Visible:
                        result = (double)values[1];
                        break;
                    default:
                        result = 0;
                        break;
                }
                return result;
            }
    
            public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
            {
                throw new NotImplementedException();
            }
        }
  • 相关阅读:
    002 课程导学
    006 实例1-温度转换
    003 Python基本语法元素
    PHP读取文件头(2字节)判断文件类型(转)
    常见的浏览器Hack技巧总结(转)
    晨曦之光 linux Crontab 使用(转)
    实用技巧:简单而有用的nohup命令介绍(转)
    shell之“>/dev/null 2>&1” 详解(转)
    phpmailer邮件类下载(转)
    PHP拦截器的使用(转)
  • 原文地址:https://www.cnblogs.com/runningRain/p/8409057.html
Copyright © 2011-2022 走看看