1

2クラスあります。1 つは、2 番目のクラスのリストをプロパティとして含む親です。2 番目のクラスにもリストがあります。

問題は、アプリケーションが 2 番目のクラス内でリストをバインドしないことです。

アプリケーションは、(親クラスの) 2 番目のクラス リストからバインドするグリッドのリストを表示し、各グリッドは 2 番目のクラス内のリストからの情報を表示します。

各グリッドは値をバインドしません

Class Parent{
   public List<NestedClass> Child { get; set; }
    .
    .
    .
}

Class NestedClass{
    public ObservableCollection<SomeParameter> Params{ get; set; }
    public string Name
    {
        get
        {
            return "Hello world";                
        }
    }

    .
    .
    .
}

以下のようなxaml。

    <ItemsControl  HorizontalContentAlignment="Stretch" ItemsSource ="{Binding Child}">
        <ItemsControl.ItemTemplate>
            <DataTemplate>
                <ItemsControl ItemsSource="{Binding Child.Params}" >
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid>
                                <Grid.ColumnDefinitions>
                                    <ColumnDefinition Width="*"/>
                                    <ColumnDefinition Width="80"/>
                                    <ColumnDefinition Width="80"/>
                                </Grid.ColumnDefinitions>
                                <Grid Grid.Column="0">
                                    <TextBlock Text="{Binding Count}" />
                                </Grid>
                                <Grid Grid.Column="1"></Grid>
                                <Grid Grid.Column="2"></Grid>
                            </Grid>
                        </DataTemplate>
                    </ItemsControl.ItemTemplate>
                </ItemsControl>                    
            </DataTemplate>
        </ItemsControl.ItemTemplate>
    </ItemsControl>

出力ウィンドウは次のように表示されます

System.Windows.Data エラー: 40: BindingExpression パス エラー: 'Params' プロパティが 'object' ''NestedClass' (HashCode=16626097)' に見つかりません。BindingExpression:Path=Params; DataItem='NestedClass' (HashCode=16626097); ターゲット要素は 'ItemsControl' (Name='') です。ターゲット プロパティは 'ItemsSource' (タイプ 'IEnumerable') です。

編集#1 xamlを追加

編集#2出力メッセージを追加

編集#3 NestedClass に name プロパティを追加

4

2 に答える 2

0

試したかどうか、または機能したかどうかにかかわらず、これを行う正しい方法は @groupgrip が述べたとおりです。

<ItemsControl HorizontalContentAlignment="Stretch" ItemsSource="{Binding Child}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <ItemsControl ItemsSource="{Binding Params}">
                ...
            </ItemsControl>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

DataContextは、 タイプが であるコレクションDataTemplateのアイテムに設定されます。このクラスには というプロパティがあるため、 内からそのプロパティを直接使用できます。内からそれをしようとしているので、そのクラスで名前が付けられたプロパティもあるはずです。ChildNestedClassParamsBindDataTemplateCountBindDataTemplate

いずれにせよ、これらの種類の問題を自分で解決する方法は、Visual Studio の [出力] ウィンドウに表示されるエラーの内容を読むことです。「そのオブジェクトにこのプロパティが見つかりません」などのエラーが表示されることがよくあります。これは、問題を追跡して修正するのに役立ちます。

于 2013-11-13T09:09:47.617 に答える