【发布时间】:2017-07-06 05:14:19
【问题描述】:
我正在尝试将单个 IMultiValueConverter 用于 XAML 中的多个控件。
我使用一个简单的字符串 Literal 来告诉 IMultiValueConverter 应该返回什么值。
但是当涉及到转换 ModifierCategoryEnableDisable 的功能时,我在 values[2] 中得到了 DependencyProperty.UnsetValue,即名为 Command 的参数的值。
类似的安排正在其他 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"在转换器完成后隐式转换为布尔值?您是否检查了 Visual Studio 中的输出窗口是否存在绑定错误和异常?您是否调试过转换器(断点和单步)? -
Noooo.zas 我说过,这个转换器将在代码中的不同位置使用,这个转换器将返回多个值。在某个时候,它应该返回一个布尔值,而它应该是在另一个中返回一个字符串。如果我能以某种方式告诉转换器如何处理传入的值然后返回适当的对象,我可以这样做,但只有我能够解决 DedpendencyProperty.Unset 值。
标签: wpf multibinding