Мультисвязывание в RowDefinition Height - PullRequest
2 голосов
/ 10 мая 2011

Я хочу сделать конвертер для высоты строки, который зависит от 3 переменных.Два из них от модели представления, и один - постоянная строка.Я сделал MultiValueConverter для этого, но, очевидно, он не устанавливает значение RowDefinition.Height.

Код выглядит следующим образом:

<RowDefinition Name="Row1">
    <RowDefinition.Height>
        <MultiBinding Converter="{StaticResource MyConverter}">
            <Binding Path="PropertyFromViewModel1" />
            <Binding Source="{StaticResource DataGridName}" />
            <Binding Path="PropertyFromViewModel2" />
        </MultiBinding>
        </RowDefinition.Height>
    </RowDefinition>

Преобразователь работает, возвращает правильные значения (в виде строк).

Код для многозначного преобразователя:

public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
    {
        if (!((values[0]) is bool))
            throw new ArgumentException("First argument 'value' must be of type bool");
        if (values[1] == null)
            throw new ArgumentException("Secound argument must be diffrent then null");
        if (!((values[2]) is bool))
            throw new ArgumentException("Third argument 'value' must be of type bool");

        var showParkedTransactionDataGrid = (bool)values[0];
        var datagridName = values[1].ToString();
        var isCustomerDiscountShowed = (bool)values[2];
        if (showParkedTransactionDataGrid)
        {
            if (datagridName == "ProductListDataGrid")
            {
                return isCustomerDiscountShowed ? "306" : "336";
            }
            else if (datagridName == "ParkedTransactionDataGrid")
            {
                return "*";
            }
        }
        else
        {
            if (datagridName == "ProductListDataGrid")
            {
                return "*";
            }
            else if (datagridName == "ParkedTransactionDataGrid")
            {
                return "0";
            }
        }
        return "";
    }

Я использовал до IValueConverter, и он работал со свойством RowDefinision Height, но multibinding нет.

1 Ответ

2 голосов
/ 10 мая 2011

Высота имеет тип System.Windows.GridLength

Убедитесь, что вы возвращаете это из преобразователя.

РЕДАКТИРОВАТЬ

И, кстати, конвертер не очень хорошо спроектирован!Это полностью зависит от именования элементов управления.При переименовании элементов управления будет очень трудно найти ошибки.

Вам следует подумать о другом способе сделать это.

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