1

我需要一些帮助来解决我在 Silverlight 5 中实现 MultiBooleanConverter 的问题。我有实现,但是获得正确的引用给我带来了一些麻烦。

这是我的初学者代码。

XAML:

<telerikRibbonView:RadRibbonButton.Visibility>
     <MultiBinding Converter="{StaticResource MultiBooleanToVisibilityConverter}">
          <Binding Path="Path1" />
          <Binding Path="Path2" />
     </MultiBinding>
</telerikRibbonView:RadRibbonButton.Visibility>

转换器(学分):

class MultiBooleanToVisibilityConverter : IMultiValueConverter
{
    public object Convert(object[] values,
                            Type targetType,
                            object parameter,
                            System.Globalization.CultureInfo culture)
    {
        bool visible = true;
        foreach (object value in values)
            if (value is bool)
                visible = visible && (bool)value;

        if (visible)
            return System.Windows.Visibility.Visible;
        else
            return System.Windows.Visibility.Collapsed;
    }

    public object[] ConvertBack(object value,
                                Type[] targetTypes,
                                object parameter,
                                System.Globalization.CultureInfo culture)
    {
        throw new NotImplementedException();
    }
}

我遇到的问题是IMultiValueConverter接口位于 namespaceSystem.Windows.Data中,它位于PresentationFrameworkdll 中,我无法将其添加为我的 Silverlight 项目中的引用,因为它不是针对 Silverlight 构建的。

如果我完全遗漏了一些明显的东西,我深表歉意。如何在 Silverlight 中使用 IMultiValueConverter?我需要一个不同的DLL吗?

此外,我的所有其他接口都实现IValueConverter了,它们存在于其中,System.Windows.Data但从System.Windows.Datadll 中提取,c:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Libraries\Client\其中不是我需要的程序集IMultiValueConverter。然而,有一个模棱两可的System.Windows.Data命名空间不应该是一个问题,因为我可以使用别名绑定来解决模棱两可的问题。我只需要弄清楚如何进入IMultiValueConverterSilverlight。

4

1 回答 1

2

不幸的是,Silverlight 没有多重绑定方案的框架实现,因此您必须自己编写更多代码。

这是一篇文章,其中包含一些非常干净的代码来做到这一点 - http://www.scottlogic.com/blog/2010/05/10/silverlight-multibinding-solution-for-silverlight-4.html

它包括显式定义相同接口的代码,然后您可以将其与上面的代码一起使用:

  public interface IMultiValueConverter
  {   
      object Convert(object[] values, Type targetType, object parameter, 
                      CultureInfo culture);

      object[] ConvertBack(object value, Type[] targetTypes, object parameter,
                           CultureInfo culture);       
  }
于 2013-07-09T21:07:07.197 回答