【问题标题】:Multibinding generates "Cannot set MultiBinding because MultiValueConverter must be specified"多重绑定生成“无法设置多重绑定,因为必须指定 MultiValueConverter”
【发布时间】:2013-10-30 20:53:27
【问题描述】:

我有一个可以正常工作的绑定按钮,见下文:

<Button x:Name="licenceFilterSet" Content="Search" Command="{Binding searchCommand}" CommandParameter="{Binding Path=Text, ElementName=licenseTextBox}" />

现在我意识到我还需要另一条信息,所以我还需要发送check-box 的值。 我这样修改了虚拟机:

<Button x:Name="licenceFilterSet" Content="Search" Command="{Binding licenseSearchCommand}">
    <Button.CommandParameter>
        <MultiBinding Converter="{StaticResource searchFilterConverter}">
            <Binding Path="Text" ElementName="licenseTextBox" />
            <Binding Path="IsEnabled" ElementName="regularExpressionCheckBox" />
        </MultiBinding>
    </Button.CommandParameter>
</Button>

下面是我的多转换器:

/// <summary>
/// Converter Used for combining license search textbox and checkbox
/// </summary>
public class SearchFilterConverter : IMultiValueConverter
{
    public object Convert(object[] values)
    {
        return new Tuple<String, bool>((String)values[0], (bool)values[1]);
    }
}

我做错了什么。我收到以下错误(指向我在 XAML 中的 MultiBinding-tag):

Cannot set MultiBinding because MultiValueConverter must be specified.

【问题讨论】:

    标签: c# visual-studio-2010 mvvm multibinding


    【解决方案1】:

    这不是 IMultiValueConverter 接口的正确实现。

    正确的是:

    public class SearchFilterConverter : IMultiValueConverter
    {
       public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
       {
          ....
       }
    
       public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
       {
       }
    }
    

    参考here

    【讨论】:

      【解决方案2】:

      你必须实现 IMultiConverter

      public class SearchFilterConverter : IMultiValueConverter
      {
       public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
       {
          return new Tuple<String, bool>((String)values[0], (bool)values[1]);;
       }
       public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
          {
              throw new NotImplementedException();
          }
      }
      

      然后在xaml中创建资源

       <Converter:SearchFilterConverter x:Key="searchFilterConverter" />
      

      那么它应该可以工作

      <Button x:Name="licenceFilterSet" Content="Search" Command="{Binding licenseSearchCommand}">
      <Button.CommandParameter>
          <MultiBinding Converter="{StaticResource searchFilterConverter}">
              <Binding Path="Text" ElementName="licenseTextBox" />
              <Binding Path="IsEnabled" ElementName="regularExpressionCheckBox" />
          </MultiBinding>
      </Button.CommandParameter>
      </Button>
      

      【讨论】:

      • 嗯。我的代码已经像这样构造并且构建和运行良好,但是这个错误仍然出现在错误列表(VS2015)中。从实验了一下,问题似乎是我的IMultiValueConverter也是一个MarkupExtension,这让解析器感到困惑。
      • @dlf 你有没有想过解决这个问题?
      • @claudekennilol 老实说,我不记得了。我怀疑我找到了一种在没有 MultiBinding 的情况下完成我所追求的任何事情的方法。
      【解决方案3】:

      我知道这个线程很旧,但我昨天遇到了同样的问题,所有内容都正确写入,但 WPF 仍然拒绝找到转换器。帮助我的是按以下方式分配转换器:

      <MultiBinding Converter="{local:ButtonParametersMultiValueConverter}">
      

      这解决了问题。

      【讨论】:

        猜你喜欢
        • 1970-01-01
        • 1970-01-01
        • 2017-02-13
        • 2018-10-26
        • 1970-01-01
        • 2010-11-13
        • 2013-01-14
        • 1970-01-01
        相关资源
        最近更新 更多