RowDefinition高度中的多绑定

时间:2011-05-10 09:55:11

标签: wpf xaml

我想为行高制作转换器,这取决于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属性,但是多重绑定不是。

1 个答案:

答案 0 :(得分:2)

高度属于System.Windows.GridLength

类型

确保从转换器返回。

修改

顺便说一下,转换器设计得不是很好!它完全取决于控件的命名。重命名控件时很难找到错误。

你应该考虑另一种方法。