我想为行高制作转换器,这取决于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属性,但是多重绑定不是。
答案 0 :(得分:2)
确保从转换器返回。
修改强>
顺便说一下,转换器设计得不是很好!它完全取决于控件的命名。重命名控件时很难找到错误。
你应该考虑另一种方法。