2017-07-06 8 views
0

XAMLの複数のコントロールに対して1つのIMultiValueConverterを使用しようとしています。IMultiValueConverterのFallBackValueはUnsetValueです

私はIMultiValueConverterが返すと思われる値を知るために、単純な文字列リテラルを使用しています。

しかし、DependencyProperty.UnsetValueは値[2]になります。つまり、Commandという名前のCommanderの値は、ModifierCategoryEnableDisableの関数を変換するときです。

他のIMultiValueConverters内​​のこのXAMLフォームの類似のコントロールについては、ここでは扱いません。 私には何が欠けているか教えてください。

注:

  1. CurrentRecは、現在選択しているオブジェクトですViewModelに
  2. からDM_CategoryDataはクラスであり、Current_Selected_CategoryはViewModelにの現在のオブジェクト、すなわちCurrenRecでList<DM_CategoryData>です。

XAML:

<GroupBox Width="226" Height="117" Margin="0" Canvas.Top="252" Header="Modifiers" Canvas.Left="55" > 
     <GroupBox.IsEnabled> 
      <MultiBinding Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" Converter="{StaticResource MDNS}"> 
        <Binding Path="SearchFound" /> 
        <Binding Path="CurrentRec.Current_Selected_Category"/> 
        <Binding Path="Command" FallbackValue="1" /> 
       </MultiBinding> 
     </GroupBox.IsEnabled> 
</GroupBox> 

のC#:

public class ModifierCategoryEnableDisable : IMultiValueConverter 
{ 
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
    { 
     string Command = values[2].ToString(); 
     bool Retval1 = false; 
     string Retval2 = ""; 
     switch(Command) 
     { 
      case "1": 
       bool SearchFound = (bool)values[0]; 
       DM_CategoryData CurrentSelectedItemCategory = (DM_CategoryData)(values[1]); 
       Retval1 = SearchFound && (CurrentSelectedItemCategory == null ? true : CurrentSelectedItemCategory.IsModifier.Equals("1") ? false : true); 
       break; 
      case "2": 
       Retval2 = "0"; 
       break; 
     }    

     if(Command.Equals("1")) 
     { 
      return Retval1; 
     } 
     else 
     { 
      return Retval2; 
     } 
    } 
} 
+0

だからあなたが期待 ' "0"'コンバータが終了した後、暗黙的にブール値に変換されるか?バインディングエラーと例外についてビジュアルスタジオの出力ウィンドウを確認しましたか?コンバータ(ブレークポイントとシングルステップ)をデバッグしましたか? – grek40

+0

Noooo.zas私は言った、このコンバータは、コード内の様々な場所で使用されるこのコンバータは、複数の値を返すつもりです。一つpoitnそれは別の文字列を返すと仮定されている間ブール値を返すsiupposedです。私は何らかの理由でコンボの値を何にするかを伝えてから適切なオブジェクトを返すことができますが、私はDedpendencyProperty.Unset値を解決することしかできません。 –

答えて

1

の多結合コンバータに追加静的データを提供するために、ConverterParameterを使用

public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture) 
{ 
    string Command = parameter as string; 

    // ... 
} 
-1

あなたはGroupBox.IsEnabledプロパティのfallbackvalueを設定しようとしていると、それはbool型です。しかし、値を1に設定しています。値[2]だけがUnsetValueを返します。 bool値をFallbackValueに設定してください。

<MultiBinding Mode="TwoWay" UpdateSourceTrigger="PropertyChanged" Converter="{StaticResource MDNS}" ConverterParameter="1"> 
    <Binding Path="SearchFound" /> 
    <Binding Path="CurrentRec.Current_Selected_Category"/> 
</MultiBinding> 

そしてConvertメソッドのパラメータをチェックします:

+0

私の主なクエストは、何とかこの値のコンバータにリテラル文字列パラメータをXAML側から強く送信することです。私の実際の問題は今now.soですので、私はちょうどxamlから多値に単純なハードコードされた文字列を送ることができますコンバータ。 –

+1

ハードコーディングされた文字列をxamlのConverterParameterとして設定することができます。 Smirti

関連する問題