2011-05-10 7 views
2

3つの変数に依存する行の高さにコンバーターを作りたいと思います。それらのうちの2つはビューモデルからのものであり、1つは定数ストリングです。私はこのためにMultiValueConverterを作ったが、明らかにRowDefinition.Height値を設定していない。RowDefinitionの高さでのマルチバインド

コードは次のようになります。

<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

私たちにもMultiValueConverterを見せてください。 –

答えて

2

高さはタイプSystem.Windows.GridLength

であるあなたは、コンバータからのことを返すことを確認してください。

EDIT

そして、ところで、コンバータは非常によく設計されていません!これは、コントロールの命名に完全に依存しています。コントロールの名前を変更するときにエラーを見つけるのは非常に難しいでしょう。

これを行う別の方法を検討する必要があります。

+0

ありがとう、それは働いた。私はまた、異なるコントロールのためのsepareteコンバーターのためにこれを分割したので、コントロール名に依存しません。 – user746571

+0

あなたは大歓迎です。私の賭けは、これらのコンバータはまったく必要ないということです。高さをAutoに設定し、コントロールの可視性をviewmodel/dataにバインドするだけです。 –

+0

不幸にもありません。私たちは特定の設計をしているので、データグリッドの2番目が表示されている場合、最初のものは別のプロパティにも依存して一定の高さを持たなければなりません。 – user746571