0


0

WPF ListBoxバインディングItemsSource

https://stackoverflow.com/questions/4100690/binding-in-wpf-to-element-of-array-specified-by-property [関連する質問]で、配列の特定の要素へのバインドについて質問しました別のプロパティ。 提供された回答は、提供されたサンプルコードの例では非常にうまく機能しました。

問題が発生しているのは、ListBoxにItemSourceを指定し、ステップスルーするときにコンバーターでDependencyProperty.UnsetValueを取得することです。 間違いなく、これがバインドに関する私の理解の問題です。

私のリストボックスは次のようになります:


そして、背後にあるコードは次のようになります。

public MainWindow()
{
    InitializeComponent();
    MyList.Add(new SomeData() { Fields = new object[] {"liver", "onions", "cake" } } );
    MyList.Add(new SomeData() { Fields = new object[] {"liver", "onions", "candy" } } );
    MyList.Add(new SomeData() { Fields = new object[] {"liver", "onions", "pie" } } );

    DataContext = this;
}

MyListはリストです。

MyIndexはintです。

コンバーターコードは

    public class FoodIndexConverter : IMultiValueConverter
    {
        public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            if (values == null || values.Length != 2)
                return null;

            int? idx = values[0] as int?;
            object[] food = values[1] as object[];

            if (!idx.HasValue || food == null)
                return null;

            return food[idx.Value];
        }

        public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }

コンバーターコードでデバッガーをステップ実行すると、MyIndex(value [0])は* DependencyProperty.UnsetValue *です-オブジェクト配列は予想どおりです。

私はそれがバインディングの問題であると仮定しています:MyIndexが何であるかを知らないという点で。

MyIndexがSomeDataクラスのプロパティである場合、期待どおりに機能しますが、そうではありません。MyListのように、MainWindowクラスのプロパティです。

MyDataリストではなく、DataContextの一部であるMyIndexプロパティに興味があることを指定するにはどうすればよいですか?

1 Answer


1


ListBoxItem(この場合はSomeDataクラス)のMyIndexプロパティを探していますが、そのプロパティは存在しません。

バインディングのElementNameをウィンドウ名に設定して、他の場所でプロパティを検索できるようにします。