【问题标题】:FallBackValue in IMultiValueConverter is UnsetValueIMul​​tiValueConverter 中的 FallBackValue 是 UnsetValue
【发布时间】:2017-07-06 05:14:19
【问题描述】:

我正在尝试将单个 IMultiValueConverter 用于 XAML 中的多个控件。

我使用一个简单的字符串 Literal 来告诉 IMultiValueConverter 应该返回什么值。

但是当涉及到转换 ModifierCategoryEnableDisable 的功能时,我在 values[2] 中得到了 DependencyProperty.UnsetValue,即名为 Command 的参数的值。

类似的安排正在其他 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" 在转换器完成后隐式转换为布尔值?您是否检查了 Visual Studio 中的输出窗口是否存在绑定错误和异常?您是否调试过转换器(断点和单步)?
  • Noooo.zas 我说过,这个转换器将在代码中的不同位置使用,这个转换器将返回多个值。在某个时候,它应该返回一个布尔值,而它应该是在另一个中返回一个字符串。如果我能以某种方式告诉转换器如何处理传入的值然后返回适当的对象,我可以这样做,但只有我能够解决 DedpendencyProperty.Unset 值。

标签: wpf multibinding


【解决方案1】:

为了向多重绑定转换器提供额外的静态数据,请使用ConverterParameter

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

并检查Convert方法中的参数:

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

    // ...
}

【讨论】:

    【解决方案2】:

    您正在尝试为 GroupBox.IsEnabled 属性设置回退值,它是布尔类型。但是您将值设置为 1。因此只有 Values[2] 返回 UnsetValue。尝试将 bool 值设置为 Fallbackvalue。

    【讨论】:

    • 我的主要任务是以某种方式从 XAML 端严格地向这个值转换器发送一个文字字符串参数。这就是我现在的实际问题。所以请指导我如何发送一个从 xaml 到多值转换器的简单硬编码字符串。
    • 因此您可以在 xaml 中将硬编码字符串设置为 ConverterParameter,例如
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-06-07
    • 2015-07-23
    • 1970-01-01
    • 1970-01-01
    • 2011-03-09
    • 2012-10-28
    相关资源
    最近更新 更多