描述:ListView是WPF中动态绑定工具的数据容器,本文实现了一个在ListView中显示的供用户选择的列表项目,并且控制列表中选择的项目数量,即实现单选。
XAML中创建ListView,代码如下:
<ListView x:Name="listView_LineOfBusiness" Width="280" Height="220">
<ListView.View>
<GridView>
<GridView.Columns>
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox Tag="{Binding Id}" Click="cbClick_LineOfBusiness"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
<GridViewColumn DisplayMemberBinding="{Binding Name}" Header="Deliver Channel" />
<GridViewColumn DisplayMemberBinding="{Binding Parent_Name}" Header="Line Of Business" />
</GridView.Columns>
</GridView>
</ListView.View>
</ListView>
效果:
控制用户选择项目的数量, 通过声明一个全局变量,然后在CheckBox的Click事件中检查这个全局变量是否为空来实现。
其基本思想是当CheckBox被单击时:
1) 获取当前的Id。
2) 检查行为是否是选中,检查全局变量tag是否为空,若空,则直接将Id付给全局变量。若全局变量不为空,告知用户只能选择一个,并取消选中行为。
3) 若行为是取消选则,检查全局变量tag是否与当前Id相等,若相等,将全局变量置空。
string selectedLineOfBusinessTag = string.Empty;
private void cbClick_LineOfBusiness(object sender, RoutedEventArgs e)
{
CheckBox ck_Selected = sender as CheckBox;
string tag = ck_Selected.Tag.ToString();
if (ck_Selected.IsChecked==true)
{
if (string.IsNullOrEmpty(selectedLineOfBusinessTag))
selectedLineOfBusinessTag = tag;
else
{
MessageBox.Show("Only one Choice can be seleted.");
ck_Selected.IsChecked = false;
}
}
else if(ck_Selected.IsChecked==false)
{
if (selectedLineOfBusinessTag == tag)
selectedLineOfBusinessTag = string.Empty;
}
}