2

{List = new Int32[] {0, 1, 2, 3}, Index = 2}次の構文を使用してコントロールにバインドするデータオブジェクトを指定します。

{Binding List[Index]}

これは機能せず、例外もスローしません。このバインディングにコンバーターを接続しても、何が起こっているのかわかりません。

{Binding List[0]}なぜ地球上でこれが機能しないのか私ができる限り: {Binding List[Index]}

4

2 に答える 2

4

インデックス自体をバインドする必要があるため、これにはコンバーターでマルチバインドを使用する必要があります。

例えば

<MyControl>
  <MyControl.Text>
    <MultiBinding Converter="{StaticResource yourConverter}">
      <MultiBinding.Bindings>
        <Binding Path="List" />
        <Binding Path="Index" />
      </MultiBinding.Bindings>
    </MultiBinding>
  </MyControl.Text>
</MyControl>

そしてコンバーター:

public class NameConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        if (values.Length != 2 || !(values[0] is IList<MyItemType>) || !(values[1] is int))
            return Binding.DoNothing;

        var list = (IList<MyItemType>)values[0];
        var index = (int)values[1];

        if (index < 0 || index >= list.Count)
            return Binding.DoNothing;

        return list[index];
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        return Binding.DoNothing;
    }
}

Silverlightのマルチバインディングソリューション(Google提供):

SL3:http ://www.olsonsoft.com/blogs/stefanolson/post/Improvements-to-Silverlight-Multi-binding-support.aspx

SL4:http ://www.scottlogic.co.uk/blog/colin/2010/05/silverlight-multibinding-solution-for-silverlight-4/

SL5: http: //www.codeproject.com/Articles/286171/MultiBinding-in-Silverlight-5

于 2012-12-04T15:43:47.190 に答える
0

バインディング式は、XAMLが解析されているときに評価されます。したがって、そこで使用される値はコンパイル時定数である必要があります。これにより、後でバインディングに使用される式に組み込むことができます。

したがって、1つの方法は、バインドするリストのアイテムを公開するプロパティをViewModelに作成することです。

残念ながら、ValueConverterここでもオプションはありません。これは、バインディング式のにバインドできないConverterParameterため、コンバーターもインデックスを認識しないためです...

于 2012-12-04T15:33:21.187 に答える