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();
            }
        }
  • 相关阅读:
    结对第二次作业——某次疫情统计可视化的实现
    结对第一次—疫情统计可视化(原型设计)
    寒假作业(2/2)——疫情统计
    软工实践寒假作业(1/2)
    3DMAX三维编辑命令FFD的使用
    个人作业——软件工程实践总结&个人技术博客
    个人作业——软件评测
    结对第二次作业——某次疫情统计可视化的实现
    软工实践寒假作业(2/2)
    软工实践寒假作业(1/2)
  • 原文地址:https://www.cnblogs.com/runningRain/p/8409057.html
Copyright © 2011-2022 走看看