0

このコードが機能しない理由を教えてください。

結果プロパティの観察可能なコレクションを持つ検索結果の観察可能なコレクションを持つビューモデルがあります。ネストされた結果プロパティのコレクションを希望どおりに表示できないようです。

オブジェクトは次のとおりです (読みやすいように抽象化されています)。

class ViewModel
{
    public ObservableCollection<SearchResults<TDomain>> SearchResults { get; set; }
}

class SearchResults<TDomain>
{
    public TDomain Result { get; set; }
    public ObservableCollection<ResultProperty> ResultProperties { get; set; }
}

class ResultProperty
{
    public string PropertyValue { get; set; }
}

これは、私が作業できないxamlです。DataContext は ViewModel に設定されます。

<StackPanel>
    <ItemsControl ItemsSource={Binding SearchResults}>
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <StackPanel>
                    <TextBlock Text={Binding Result.Id}/>
                    <StackPanel Orientation="Horizontal">
                        <ItemsControl ItemsSource={Binding ResultProperties}>
                            <ItemsControl.ItemTemplate>
                                <DataTemplate>
                                    <TextBlock Text="{Binding PropertyValue}" />
                                </DataTemplate>
                            </ItemsControl.ItemTemplate>
                        </ItemsControl>
                    </StackPanel>
                </StackPanel>
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>
    <TextBlock Text="PLACEHOLDER /////"/>
</StackPanel>

私が探している結果は次のようなものです。

[Stack panel to keep things orderly]
1
property1property2property3...
2
property1property2property3...
3
property1property2property3...
PLACEHOLDER /////

私が得ている結果はこれらです

[Stack panel to keep things orderly]
1

2

3

PLACEHOLDER /////

つまり、バインディングは文字列を取得していません。コレクションが期待どおりに入力されていることを確認しました。しかし、xaml を動作させることができません。

* *追加情報

いくつかの解決策を試してみましたが、うまくいかないので、詳細を追加します。コレクションがどのように更新されているかについて何か不足している可能性があります。

ビューモデルには「検索」と呼ばれるボタンがあり、ビュー モデルの以下の TrySearch メソッドを呼び出す ICommand を使用します。

public void TrySearch()
{
    var results = _model.GetAll();
    foreach(var result in results)
        this.SearchResults.Add(new SearchResults<TDomain>(result));
}

コレクションの更新方法が原因で、これが機能しない理由はありますか? SearchResults は依存関係プロパティです (私は知っています。それは INPC である必要がありますが、その依存関係ではありません) が、他のコレクションはそうではありません。これは問題になる可能性がありますか?

4

3 に答える 3

0

答えは、SearchResults クラスが適切に接続されていないことです。依存関係プロパティを持つ依存オブジェクトにしましたが、正常に動作します。INotifyPropertyChanged の場合も同様に変換されると想定しています。回答ありがとうございます。

于 2013-09-26T11:52:42.010 に答える