1

私は似たようなオブジェクトを持っています

class Quote
{
    string Ticker {set; get; }
    string Rating {set; get;}
    People Sender {set; get;}
}

ピープルは、

class People
{
    string Email {set; get;}
    int Age {set; get;}
    string Firm {set; get;}
}

私はまた、引用のObservableCollectionを持っています、

ObservableCollection <Quote> QuoteList;

次に、QuoteListをDataGridに表示して、各行に次の3つのセルが含まれるようにします。1。Quote.Ticker 2. Quote.Rating 3. Quote.Sender.Email

また、各行をクリックすると、クリックした行のQuoteオブジェクトを取得できるようにしたいと思います。どうすればそれを達成できますか?

4

1 に答える 1

3

を にバインドするDataGridItemsSourceObservableCollection<Quote>それぞれがオブジェクトをそのままDataGridRow使用して構築されます(データ層)。QuoteDataContext

デフォルトでは、DataGrid はデータ項目の各プロパティの列を自動的に生成するため、この場合はTicker、、、RatingおよびSender.

にバインドされた列を含むAutoGenerateColumns="False"独自の を設定および定義することで、それをオーバーライドできます。<DataGrid.Columns>Sender.Email

<DataGrid ItemsSource="{Binding Quotes}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Ticker"  Binding="{Binding Ticker}"/>
        <DataGridTextColumn Header="Rating"  Binding="{Binding Rating}"/>
        <DataGridTextColumn Header="Email"  Binding="{Binding Sender.Email}"/>
    </DataGrid.Columns>
</DataGrid>

または、暗黙的な DataTemplate を使用して、プロパティSenderを含む文字列でオブジェクトを描画するように WPF に指示できます。Email

<DataGrid ItemsSource="{Binding Quotes}">
    <DataGrid.Resources>
        <DataTemplate TargetType="{x:Type local:People}">
            <TextBlock Text="{Binding Email}" />
        </DataTemplate>
    </DataGrid.Resources>
</DataGrid>

2 つのうち、編集などのために余分なコードを作成する必要がないため、状況に応じて最初のものを選択します。

行がクリックされたときにデータ オブジェクトを取得するには、単に行の をチェックアウトするDataContextか、にバインドしますCommandParameter"{Binding }"

于 2012-09-27T14:08:04.377 に答える