wpf中静态数据绑定的问题

时间:2010-05-18 17:32:00

标签: wpf data-binding combobox

我对wpf比较新,我还不明白绑定。

我想在我的应用程序中使用相同的项目有几个组合框。基本的解决方案是复制粘贴,但这不是一个好习惯。所以我想把一个带有我想要的内容的静态资源放在一起,并将所有组合框绑定到它。它编译并运行良好,但组合框是空的。

以下是代码:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

<ItemsControl x:Key="Validations">
    <ItemsControl.Items>
        <ComboBoxItem>String</ComboBoxItem>
        <ComboBoxItem>Numeric</ComboBoxItem>
    </ItemsControl.Items>
</ItemsControl>

这是组合框:

<ComboBox ItemsSource="{Binding Source={StaticResource Validations}}"/>

我知道这方面的解决方案可能很简单,但我还没弄明白。我会继续努力;)

由于

1 个答案:

答案 0 :(得分:2)

使资源成为字符串列表,而不是可视元素,然后使用StaticResource扩展名将其分配给ItemsSource属性,如下所示:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>
        <x:ArrayExtension x:Key="Data" Type="{x:Type sys:String}">
            <sys:String>String1</sys:String>
            <sys:String>String2</sys:String>
            <sys:String>String3</sys:String>
        </x:ArrayExtension>
    </Window.Resources>
    <Grid>
        <StackPanel>
            <ComboBox ItemsSource="{StaticResource Data}"/>
            <ComboBox ItemsSource="{StaticResource Data}"/>
            <ComboBox ItemsSource="{StaticResource Data}"/>
        </StackPanel>
    </Grid>
</Window>

注意xmlns:sys命名空间的定义(映射到程序集System中的命名空间mscorlib)以及使用x:ArrayExtension元素在XAML中声明一个简单数组。