我希望在多个ComboBoxItem
es中显示相同的ComboBox
。
<ComboBox>
<ComboBoxItem Content="1" />
<ComboBoxItem Content="2" />
<ComboBoxItem Content="3" />
<ComboBoxItem Content="4" />
<ComboBoxItem Content="5" />
</ComboBox>
有没有一种简单的方法可以在不重复代码的情况下执行此操作,仅在XAML中使用(不使用代码隐藏)?
答案 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。将您自己的样式(模板)添加到全局资源允许您与多个控件共享它。