我有一本字典:
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中的一些数据(所有汽车都很常见),例如徽标。这个synthax虽然不起作用:
<DataGridTextColumn Header="Full Name" Binding="{Binding BrandsDetails.Logo}" IsReadOnly="True" />
提前感谢您的回答!
答案 0 :(得分:1)
我想知道以下链接可以解决您的问题
http://www.dev102.com/2008/03/07/binding-a-wpf-control-to-a-dictionary/
引用
绑定到字典可能很棘手。
这听起来很简单,但它在第一次尝试时从不起作用。通常,当您第一次运行应用程序时,您会看到而不是您为项目创建的漂亮模板,而是获得看起来像一对键和值的内容。你的绑定工作正常,你只是没有考虑你绑定的是什么。字典中的每个项目都是一对(Key,Value),这正是您作为绑定项目获得的内容。您有两种处理方法,您可以更改Binding表达式的标记以包含对值的引用:
<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">
现在你把你的控制绑定到一个字典,华友世纪!
答案 1 :(得分:0)