WPF IValueConverter and IMultiValueConverter

2018-02-03 19:46:50来源:cnblogs.com作者:积跬步---行千里人点击

分享

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();        }    }

相关文章

    无相关信息

最新文章

123

最新摄影

闪念基因

微信扫一扫

第七城市微信公众平台