多个ComboBox的相同内容

时间:2012-12-25 16:50:30

标签: c# .net wpf vb.net xaml

我希望在多个ComboBoxItem es中显示相同的ComboBox

<ComboBox>
    <ComboBoxItem Content="1" />
    <ComboBoxItem Content="2" />
    <ComboBoxItem Content="3" />
    <ComboBoxItem Content="4" />
    <ComboBoxItem Content="5" />
</ComboBox>

有没有一种简单的方法可以在不重复代码的情况下执行此操作,仅在XAML中使用(不使用代码隐藏)?

3 个答案:

答案 0 :(得分:3)

要回答你的问题,你可以在Xaml中创建一个公共数组,并将其分配给ComboBox的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:system="clr-namespace:System;assembly=mscorlib"
    Title="MainWindow" Height="350" Width="525">
   <Window.Resources>
       <x:ArrayExtension x:Key="myArray" Type="system:String">
           <system:String>1</system:String>
           <system:String>2</system:String>
           <system:String>3</system:String>
           <system:String>4</system:String>
           <system:String>5</system:String>
       </x:ArrayExtension>
   </Window.Resources>
   <Grid>
       <ComboBox Height="23" ItemsSource="{StaticResource myArray}" HorizontalAlignment="Left" Margin="10,10,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" />
       <ComboBox Height="23" ItemsSource="{StaticResource myArray}" HorizontalAlignment="Left" Margin="148,10,0,0" Name="comboBox2" VerticalAlignment="Top" Width="120" />
   </Grid>
</Window>

答案 1 :(得分:0)

简单 - 将Comboboxes数据绑定到同一个DataSource。


<ComboBox ItemsSource={Binding CommonItems} />

这将在Window / UserControl的DataContext中搜索ComboBox是名为CommonItems的公共属性的子项,并将其用作ItemSource。


快速样本:

如果你在WPF应用程序中有一个简单的窗口,在后面的Window代码中你可以在构造函数中设置:

Window1()
{
  this.DataContext = this;
}

之后,定义一个公共属性CommonItems,您可以在其中设置要在多个ItemsControls中使用的列表:

 public List<string> CommonItems {get;set;}

并且在Window UI代码(xaml文件)中,您可以将CommonItems列表用作多个控件的ItemSource,它将起作用。

答案 2 :(得分:0)

   var priceList = new List<int>
                        {
                            1,
                            2,
                            3,
                            4,
                            5
                        };

    //Now we can use CopyTo() Method

    priceList.CopyTo(insuredList);


    ComboBox1.Datasource=priceList;
    ComboBox2.Datasource=insuredList;

//没有代码隐藏方法:

您需要为每个ComboBox创建新的ComboBoxItems。通常你会使用一个源集合并将bind用于两个ComboBox,然后他们将自己创建新项目。

您也可以使用application resources。将您自己的样式(模板)添加到全局资源允许您与多个控件共享它。