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インターフェイスが名前空間System.Windows.Dataに存在し、PresentationFrameworkdll に存在することです。これは、Silverlight に対してビルドされていないため、Silverlight プロジェクトに参照として追加できません。

明らかな何かが完全に欠けている場合はお詫び申し上げます。Silverlight で IMultiValueConverter を使用するにはどうすればよいですか? 代わりに必要な別の DLL はありますか?

また、他のすべてのインターフェイスIValueConverter実装されていますが、必要なアセンブリではないdllからプルされています。ただし、あいまいさを解決するために Alias バインディングを使用するだけでよいため、あいまいな名前空間を持つことは問題になりません。Silverlight にアクセスする方法を理解する必要があります。System.Windows.DataSystem.Windows.Datac:\Program Files (x86)\Microsoft SDKs\Silverlight\v5.0\Libraries\Client\IMultiValueConverterSystem.Windows.DataIMultiValueConverter

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 に答える