2013-07-09 56 views
1

我需要一些帮助来找出我在Silverlight 5中实现MultiBooleanConverter的问题。我有实现,但获取正确的引用会给我带来一些麻烦。Silverlight 5中的PresentationFramework

这是我的初学者代码。

XAML:

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

转换器(Credit):我有

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.Datac:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Libraries\Client\System.Windows.Data DLL拉这不是我需要IMultiValueConverter大会。然而,具有不明确的System.Windows.Data命名空间不应该是一个问题,因为我可以使用Alias绑定来解决歧义。我只需要弄清楚如何在Silverlight中获得IMultiValueConverter

回答

2

不幸的是Silverlight没有Multibinding场景的框架实现,所以你必须自己编写更多的代码。

这里是包括一些漂亮干净的代码来做到这一点虽然文章 - 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);  
    } 
+0

哦,球......好吧。谢谢(你的)信息! – tnw