簡體   English   中英

綁定一些引用的對象屬性

[英]Bind some referenced object properties

我有一本字典:

private Dictionary<int, ICar> _ICarsDic;

對象ICar實際上包含另一個對象列表:

public interface ICar 
{
    int carId { get; set; }
    string carName { get; set; }
    Dictionnary<int,IBrandsDetails> brandsDetails { get; set; }
}

我將此CarsDic字典綁定到DataGrid(之前將其轉換為IEnumerable,但這不是問題的重點,因此此處未顯示)。

<DataGrid Name="Cars"
    ItemsSource="{Binding}" 
    SelectedItem="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type UserControl}, AncestorLevel=2}, Path=SelectedCar, Mode=TwoWay}">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Car Id" Binding="{Binding CarId}" IsReadOnly="True" />
        <DataGridTextColumn Header="Car Name" Binding="{Binding carName}" IsReadOnly="True" />
    </DataGrid.Columns>

我的問題是,我也想顯示BrandsDetails的一些數據(所有汽車都通用),例如徽標。 這個合奏雖然不起作用:

<DataGridTextColumn Header="Full Name" Binding="{Binding BrandsDetails.Logo}" IsReadOnly="True" />

預先感謝您的回答!

我認為以下鏈接將解決您的問題

http://www.dev102.com/2008/03/07/binding-a-wpf-control-to-a-dictionary/

引用

綁定到字典可能很棘手。

聽起來很簡單,但第一次嘗試就無法使用。 通常,當您第一次運行應用程序時,您會看到,而不是為項目創建的漂亮模板,您得到的東西看起來像一對鍵和值。 您的綁定效果很好,您只是沒有想到要綁定到什么。 字典中的每個項目都是一對(鍵,值),而這正是您作為綁定項目獲得的。 您有兩種處理方法,可以更改Binding表達式的標記以包括對Value的引用:

<ComboBox.ItemTemplate>
             <DataTemplate>
                 <StackPanel Orientation="Horizontal">
                     <TextBlock Text="{Binding Value.Text}"></TextBlock>
                     <TextBlock> = </TextBlock>
                     <TextBlock Text="{Binding Value.Value}"></TextBlock>
                 </StackPanel>
             </DataTemplate>
         </ComboBox.ItemTemplate>

或者可以更改控件的綁定表達式以引用字典的Values屬性:

 <ComboBox Height="23" Margin="0,14,9,0" Name="comboBox1"
                  VerticalAlignment="Top" SelectedValuePath="Key"
                  ItemsSource="{Binding Items.Values}"
                  HorizontalAlignment="Right" Width="120">

現在,您已將控件綁定到詞典,萬歲!

對於這個答案,我將假設您的DataGrid已綁定到包含ICar實現對象的Dictionary(您的確切綁定既不清楚又過於復雜)。

BrandsDetails綁定失敗的原因是該屬性實際上是Dictionary ,並且您知道它沒有Logo屬性。 理想情況下,DataGrid列應具有一個數據模板,該模板是某種中繼器控件(如ListView或另一個DataGrid),或者使用MultiBinding和轉換器-這是唯一可以從該屬性顯示完整Dictionary的方法。 否則,您將需要在綁定的路徑中使用 索引來挑選單個項目。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM