需求:下拉列表ComboBox中,要求部分Item不可用。效果是鼠标一上去后不获得焦点,且无法点击。

前台XAML界面:

<!-- 下拉列表:省份 -->
<ComboBox Grid.Column="0" Grid.Row="0" x:Name="provinceComboxBox" Margin="20,10,0,200" Height="20"
ItemsSource="{Binding ProvinceList}" FontSize="12" Style="{StaticResource myComboBox_Useable}">
<ComboBox.ItemContainerStyle>
<Style TargetType="ComboBoxItem">
<Setter Property="IsEnabled" Value="{Binding isEnabled}" />
</Style>
</ComboBox.ItemContainerStyle>
</ComboBox>

样式文件如下:使得可用于不可用的Item文字颜色不同,显示的文字是实体类中的”provinceName”属性。

<!-- 样式:x:Key="myComboBox_Useable" 下拉列表中,可能包含不可选的Item! -->
<Style x:Key="myComboBox_Useable" TargetType="{x:Type ComboBox}">
<Setter Property="BorderThickness" Value="1"/>
<Setter Property="HorizontalContentAlignment" Value="Center"/> <Setter Property="ItemTemplate">
<Setter.Value>
<DataTemplate>
<TextBlock Text="{Binding Path=provinceName}">
<TextBlock.Style>
<Style TargetType="TextBlock">
<Style.Triggers>
<DataTrigger Binding="{Binding isEnabled}" Value="True">
<DataTrigger.Setters>
<Setter Property="Foreground" Value="blue"/>
<!--<Setter Property="IsEnabled" Value="{Binding isEnabled}" />--><!-- 经测试,在样式中写无效,改到在前台写 -->
</DataTrigger.Setters>
</DataTrigger>
<DataTrigger Binding="{Binding isEnabled}" Value="False">
<DataTrigger.Setters>
<Setter Property="Foreground" Value="Pink"/>
<!--<Setter Property="IsEnabled" Value="{Binding isEnabled}" />--><!-- 经测试,在样式中写无效,改到在前台写 -->
</DataTrigger.Setters>
</DataTrigger>
</Style.Triggers>
</Style>
</TextBlock.Style>
</TextBlock>
</DataTemplate>
</Setter.Value>
</Setter> </Style>

ViewModel中声明前台控件ItemsSource绑定到的列表

private ObservableCollection<Provinces> provinceList;   // 所有省份的信息
public ObservableCollection<Provinces> ProvinceList
{
get { return provinceList; }
set { SetProperty(ref provinceList, value); }
}

注意,前台ComboBoxItem的”IsEnabled”属性绑定到的是Provinces实体类中的”IsEnabled”属性。

public class Provinces
{
public int provinceId { get; set; } // 省会ID
public string provinceName { get; set; } // 省会名称
public bool isEnabled { get; set; } // 该省份是否可用
}

控制层给ProvinceList列表填充数据即可。

houseTypeViewModel.ProvinceList.Clear();
houseTypeViewModel.ProvinceList = DataList; // 这是联网获取的数据! foreach (var item in houseTypeViewModel.ProvinceList)
{
// 模拟的数据
if (item.provinceName.Equals("广西壮族自治区") || item.provinceName.Equals("广东省"))
{
item.isEnabled = true;
} houseTypeViewModel.ProvinceName.Add(item.provinceName);
}

最终效果如下图:

最新文章

  1. [LeetCode] Remove Element 移除元素
  2. 有关bootstrap之排版
  3. win10 mysql 5.7.13 服务无法启动 3534
  4. [专题论文阅读]【分布式DNN训练系统】 FireCaffe
  5. Python--增量循环删除MySQL表数据
  6. 初识jsp
  7. pd的django To do list教程-----(2)models模型的建立
  8. Oracle EBS-SQL (MRP-1):检查期间内计划完成的任务.sql
  9. IEEE 754标准
  10. screen 链接远程桌面
  11. 5linux引导流程解析
  12. JVM垃圾收集(Java Garbage Collection / Java GC)
  13. HQL-Query接口
  14. 转 Master-Worker模式 并行程序设计模式--Master-Worker模式
  15. JS中的数学方法
  16. 【CSS】定义元素的对齐方式
  17. VirtualBox安装Centos后实现文件夹共享
  18. HDOJ1000
  19. POJ3613 k边最短路
  20. 虚拟机和主机文件实时同步 -- winsshfs的快速入手

热门文章

  1. python实现的、带GUI界面电影票房数据可视化程序
  2. Spring MVC Beginner’s Guide勘误表
  3. 使用padding代替高度实现背景图片高度按比例自适应
  4. HDUOJ------(1230)火星A+B
  5. php计算经纬度间的距离
  6. python练习笔记——完全数(1000以内的)
  7. python学习笔记011——内置函数pow()
  8. 转: Python中的os.path.dirname(__file__)
  9. AME_IExpense费用报表通过AME审批简单例子(案例)
  10. 选择问题 and 字谜游戏问题