IMul​​tiValueConverter中的FallBackValue是UnsetValue

时间:2017-07-06 05:14:19

标签: wpf multibinding

我正在尝试在XAML中为一个以上的控件使用单个IMultiValueConverter。

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

但我在值[2]中得到DependencyProperty.UnsetValue,即转换ModifierCategoryEnableDisable函数时名为Command的参数值。

类似的安排正在其他IMultiValueConverters中对此XAML表单进行类似的控制,但不在此处。  请指导我缺少什么?

注:

  1. CurrentRec是ViewModel
  2. 中当前选定的对象
  3. DM_CategoryData是一个Class,而Current_Selected_Category是ViewModel当前对象中的List<DM_CategoryData>,即CurrenRec。
  4. 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;
            }
       }
    }
    

2 个答案:

答案 0 :(得分: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;

    // ...
}

答案 1 :(得分:-1)

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