DataGrid列宽度字符串到宽度转换器MVVM

时间:2019-03-20 10:28:34

标签: c# wpf mvvm datagrid converters

现在,我有一个带有多个不同条目的组合框,并且当我选择一个数据网格时,我必须根据从组合框中选择的文本来更改列宽。到目前为止,我已经尝试在窗口资源下的样式中使用转换器,但是,列的宽度并没有根据输入的文本而改变,而是改回了Auto。这是我的转换器:

public class BindingWidthConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        var Notation = value as string;
        if (Notation == null) return 26;
        switch (Notation)
        {
            case "size 1":
                return 26;
            case "size 2":
                return 40;
            case "size 3":
                return 45;
            case "size 4":
                return 50;
            case "size 5":
                return 60;
            default:
                return 26;
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

这是在我的XAML窗口下的定义方式。资源:

<Style x:Key="ElementStyle" TargetType="TextBlock">
        <Setter Property="TextAlignment" Value="Center"/>
        <Setter Property="VerticalAlignment" Value="Center"/>
        <Setter Property="Width" Value="{Binding NotationType, UpdateSourceTrigger=PropertyChanged, IsAsync=True, Mode=TwoWay, Converter={StaticResource WidthConv}, ConverterParameter=0}"/>
</Style>

然后将其输入到我的DataGrid.Column部分:

<DataGridTextColumn Header="0" Binding="{Binding DataSpace, UpdateSourceTrigger=PropertyChanged, IsAsync=True, Converter={StaticResource DataConv}, ConverterParameter=0}"
    ElementStyle="{StaticResource ElementStyle}" 
    CellStyle="{StaticResource CellStyle0}" 
    HeaderStyle="{StaticResource HeaderStyle}"/>

任何人都可以帮忙吗?

1 个答案:

答案 0 :(得分:0)

您是否尝试过在DataGrid宽度本身而不是TextBlock中使用宽度转换器?

<DataGridTextColumn Header="0" 
     Binding="{Binding DataSpace, UpdateSourceTrigger=PropertyChanged, IsAsync=True, Converter={StaticResource DataConv}, ConverterParameter=0}"
     ElementStyle="{StaticResource ElementStyle}"
     Width="{Binding NotationType, UpdateSourceTrigger=PropertyChanged, IsAsync=True, Mode=TwoWay, Converter={StaticResource WidthConv}}"
     CellStyle="{StaticResource CellStyle0}" 
     HeaderStyle="{StaticResource HeaderStyle}"/>

我假设NotationType是与DataSpace相同项目的属性。

让我知道是否可行。

相关问题