WPF绑定到我的DataContext中的值

时间:2019-03-26 04:30:35

标签: wpf data-binding

我有一个普通的“ Location”对象,其中包含要显示的字符串属性(城市,国家/地区,邮政编码等)的列表,位于属性名称的标题下方。我现在拥有的东西可以正常工作,并且看起来像这样:

<TextBlock Text="City" Style="{StaticResource HeaderStyle}" />
<TextBlock Text="{Binding City}" />
<TextBlock Text="Country" Style="{StaticResource HeaderStyle}" />
<TextBlock Text="{Binding Country}" />

…等。标头文本恰好与属性路径相同,并且自然地,我想避免重复编写所有这些对TextBlocks,而是使用ItemsControl和DataTemplates。

我已经在Window.Resources中定义了一个字符串列表,并且有一个ItemsControl至少正确显示了标题,但是我不能使用动态值作为绑定路径:

<Window.Resources>
    <x:Array x:Key="LocationKeys" Type="sys:String">
        <sys:String>City</sys:String>
        <sys:String>Country</sys:String>
        <sys:String>Zip</sys:String>
    </x:Array>
</Window.Resources>

...

<ItemsControl ItemsSource="{StaticResource LocationKeys}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding}" Style="{StaticResource HeaderStyle}" />
                <TextBlock Text="{Binding Path={Obviously I can't do this}}" />
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
<ItemsControl>

太近了!我无法撼动自己在这里缺少某些东西的感觉,而且在查找术语以寻找同样问题的人方面遇到了很多麻烦-到目前为止,我对“动态绑定路径”的所有关注'等通常试图解决另一个完全不同的问题。

我想念一些简单的事情吗?有更好的方法吗?

1 个答案:

答案 0 :(得分:0)

您的视图模型可能包含类似的字典

public class ViewModel
{
    public Dictionary<string, object> Locations { get; }
        = new Dictionary<string, object>();
}

您将像这样绑定到的

<ItemsControl ItemsSource="{Binding Locations}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <StackPanel Orientation="Horizontal">
                <TextBlock Text="{Binding Key}" Width="100"/>
                <ContentControl Content="{Binding Value}"/>
            </StackPanel>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>