DataGrid Столбец Ширина строки в ширину конвертер MVVM - PullRequest
0 голосов
/ 20 марта 2019

Прямо сейчас у меня есть комбинированный список с несколькими различными записями, и когда он выбран, я хочу сетку данных, я должен изменить ширину столбца в соответствии с выбранным текстом из комбинированного списка. До сих пор я пытался использовать конвертер в стиле под моими ресурсами окна, однако ширина моих столбцов не изменяется в соответствии с введенным текстом, а вместо этого устанавливается на 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.resource:

<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 голосов
/ 20 марта 2019

Вы пытались использовать преобразователь ширины в самой ширине 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.

Дайте мне знать, если это работает.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...