PresentationFramework in Silverlight 5

本文关键字:Silverlight in PresentationFramework | 更新日期: 2023-09-27 18:21:39

我需要一些帮助来解决在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接口位于命名空间System.Windows.Data中,该命名空间位于PresentationFramework dll中,我无法将其添加为Silverlight项目中的引用,因为它不是针对Silverlight构建的。

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

此外,我的所有其他接口都实现了IValueConverter存在于System.Windows.Data中,但是从c:'Program Files (x86)'Microsoft SDKs'Silverlight'v5.0'Libraries'Client'中的System.Windows.Data dll中提取的,这不是IMultiValueConverter所需的程序集。但是,有一个不明确的System.Windows.Data命名空间应该不是问题,因为我可以使用Alias绑定来解决不明确的问题。我只需要弄清楚如何在Silverlight中获得IMultiValueConverter

PresentationFramework in Silverlight 5

不幸的是,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);       
  }