1

データバインディングの問題で再び立ち往生しています。
今回は aListViewSelectedItemaの にバインドしたいと思いGridViewます。私はすでにこのタイプのデータバインディングで成功していますが、今ListViewでは私の選択したアイテムに関する詳細を表示する必要がありGridViewます. 存在するはずのアイテムがありません。バインドは my のプロパティでうまくいき
ます。属性を で置き換えることは、どちらも機能しないため、オプションではないようです。 ソース ビュー:GridViewMainViewModel
ElementNamex:Resouces

<GridView x:Name="gridViewOrderYears" 
          ItemsSource="{Binding SelectedCustOrders, Mode=TwoWay}"
          HorizontalAlignment="Left" 
          Grid.Row="1" 
          VerticalAlignment="Top" 
          Width="316" 
          Height="63" 
          Margin="657,316,0,0"
          SelectionMode="Single">
    <GridView.ItemTemplate>
        <DataTemplate>
            <Grid>
                <Border BorderThickness="1" BorderBrush="Aquamarine">
                    <StackPanel>
                        <TextBlock Text="{Binding Year}" FontSize="20"/>
                        <TextBlock Text="{Binding OrderCount}"/>
                    </StackPanel>
                </Border>
            </Grid>
        </DataTemplate>
    </GridView.ItemTemplate>
</GridView>

このビューはバインドしません:

<ListView HorizontalAlignment="Left" 
          Height="231" 
          Margin="657,401,0,0" 
          Grid.Row="1" 
          VerticalAlignment="Top" 
          Width="316"
          DataContext="{Binding SelectedItem, ElementName=gridViewOrderYears}">
    <ListView.ItemTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding DoneOrders.Order_Date, ElementName=gridViewOrderYears}" />
        </DataTemplate>
    </ListView.ItemTemplate>
</ListView>

SelectedCustOrdersプロパティはIList<OrderYears>.
OrderYearsmy で定義された次のデータ値オブジェクトですMainViewModel:

public class OrderYears
    {
        public int? Year { get; set; }
        public IList<Orders> DoneOrders { get; set; }
        public int OrderCount { get; set; }
    }
4

2 に答える 2

1

OrderYears オブジェクトに存在しない「Orders」という名前のプロパティにバインドしようとするため、問題は ListView バインディングにあると思います。バインドできる DoneOrders という名前のプロパティがあります (プロパティ名をリスト内の要素のタイプと混同しないでください!) が、TextBlock を IList にバインドすると、IList オブジェクトの GUID を取得するだけです。

ListView を ListBox に置き換えて、次のようなことを試してください (ここでやろうとしていることには十分です)。

 <ListBox DataContext="{Binding ElementName=gridViewOrderYears, 
                                Path=SelectedItem.DoneOrders}" 
          DisplayMemberPath="Order_Date"/>

テンプレートを作成する必要はありません。ListBox 内の項目は TextBlock のように表示されます。MainProperty.SubProperty のようなネストされたプロパティにバインドすることでメリットが得られることに注意してください。

これが役に立ったかどうか教えてください。始めたばかりのとき、バインディングは頭痛の種になる可能性があります...

于 2012-12-28T19:49:08.427 に答える
0

ついにできた。
何時間にもわたる試行錯誤の後、最終的に代用DataContextするItemsSourceことがうまくいきました...
時には物事はあなたが思っているよりも簡単です:)

于 2012-12-29T01:45:50.157 に答える