XAMLの複数のコントロールに対して1つのIMultiValueConverterを使用しようとしています。IMultiValueConverterのFallBackValueはUnsetValueです
私はIMultiValueConverterが返すと思われる値を知るために、単純な文字列リテラルを使用しています。
しかし、DependencyProperty.UnsetValueは値[2]になります。つまり、Commandという名前のCommanderの値は、ModifierCategoryEnableDisableの関数を変換するときです。
他のIMultiValueConverters内のこのXAMLフォームの類似のコントロールについては、ここでは扱いません。 私には何が欠けているか教えてください。
注:
- CurrentRecは、現在選択しているオブジェクトですViewModelに
- から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"'コンバータが終了した後、暗黙的にブール値に変換されるか?バインディングエラーと例外についてビジュアルスタジオの出力ウィンドウを確認しましたか?コンバータ(ブレークポイントとシングルステップ)をデバッグしましたか? – grek40
Noooo.zas私は言った、このコンバータは、コード内の様々な場所で使用されるこのコンバータは、複数の値を返すつもりです。一つpoitnそれは別の文字列を返すと仮定されている間ブール値を返すsiupposedです。私は何らかの理由でコンボの値を何にするかを伝えてから適切なオブジェクトを返すことができますが、私はDedpendencyProperty.Unset値を解決することしかできません。 –