2011-05-10 5 views
2

Я хочу сделать конвертер для высоты строки, который зависит от трех переменных. Два из них - из модели представления, а одна - константа. Для этого я сделал MultiValueConverter, но, очевидно, не устанавливал значение RowDefinition.Height.Multibinding в 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 Рост собственности, но MultiBinding не.

+0

Покажите нам MultiValueConverter. –

ответ

2

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

Убедитесь, что вы вернетесь, что из конвертера.

EDIT

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

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

+0

Спасибо, это сработало. Я также разделил это на separete-конвертеры для разных элементов управления, поэтому теперь он не зависит от имени управления. – user746571

+0

Добро пожаловать. Моя ставка заключается в том, что вам вообще не нужны эти конвертеры. Просто установите высоту в Auto и привяжите видимость элементов управления к viewmodel/data. –

+0

Несчастливо нет. Поскольку у нас есть конкретные конструкции, если вторая часть datagrid видна, то первая должна иметь постоянную высоту, зависящую и от другого свойства. – user746571

Смежные вопросы