在WPF的Xaml中为ComboBox绑定数据时,由于参数很多,很容易混淆,在ListView中使用更是如此。本文通过对ComboBox在窗口和在ListView中绑定东西的属性和属性可能是枚举类型的情况进行简单讲解和示例,以作实际应用参照。
源码可以到这里下载:ComboBoxBindings.rar
1、ComboBox在窗口容器中的情况
2、ComboBox在ListView中的情况
3、绑定枚举
示例中做枚举类型Sex的绑按时,先在Xaml中绑定值,然后在ComboBox的ItemsSouce中以String的方法枚举每个枚举值,形成Items的调集。这种要领是没问题,,但在Xaml中枚举每个值,容易堕落。
其实枚举类型绑定可以做的更简单一些,就是在ComboBox的loaded时间中枚举并赋值ItemsSource,这个调集就是要绑定的枚举类型,而不是String类型:
如在一个ListView中绑定Size属性:
1、在后台代码中重写ComboBox的loaded事件,在里面将枚举类型以一个调集的形式绑定到ComboBox的ItemsSource:
代码
private void comboBoxSizeType_Loaded(object sender, RoutedEventArgs e)
{
List<RebarSize> items = new List<RebarSize>();
items.Add(RebarSize.S3);
items.Add(RebarSize.S4);
items.Add(RebarSize.S5);
items.Add(RebarSize.S6);
items.Add(RebarSize.S7);
items.Add(RebarSize.S8);
items.Add(RebarSize.S9);
items.Add(RebarSize.S10);
items.Add(RebarSize.S11);
items.Add(RebarSize.S14);
items.Add(RebarSize.S18);
ComboBox box = sender as ComboBox;
box.ItemsSource = items;
}
这样,当ComboBox显示到界面时即可自动绑定ItemsSource = items。
2、在Xaml中绑定:
就一句话:SelectedValue="{Binding Path=Size, Mode=TwoWay}“,Ok了:
代码
<ListView Name="listView1" Margin="20" BorderThickness="0,0,1,1">
<ListView.View>
<GridView>
<GridViewColumn Header="ID" DisplayMemberBinding="{Binding Path=Name}"/>
<GridViewColumn Header="Size">
<GridViewColumn.CellTemplate>
<DataTemplate>
<ComboBox Name="comboBoxSizeType" Loaded="comboBoxSizeType_Loaded" MinWidth="60" BorderThickness="0"
SelectedValue="{Binding Path=Size, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
...
...
4、ItemsSource的RelativeSource绑定
示例中的Xmal代码:
Window1.xaml: