我需要一些帮助来解决我在Silverlight 5中实现MultiBooleanConverter的问题。我有实现,但是获得正确的引用会给我带来一些麻烦。
这是我的初学者代码。
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构建的。
此外,我的所有其他接口都实现了IValueConverter
,其中也位于System.Windows.Data
,但是来自System.Windows.Data
中的c:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Libraries\Client\
dll,这是IMultiValueConverter
不是System.Windows.Data
所需的装配。但是,具有不明确的IMultiValueConverter
命名空间应该不是问题,因为我可以使用Alias绑定来解决歧义。我只需要弄清楚如何在Silverlight中获取{{1}}。
答案 0 :(得分: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);
}