ComboBox控件 <ComboBox x:Name="ComboType" HorizontalAlignment="Left" Margin="220,77,0,0" VerticalAlignment="Top" Width="240"/>
// 背景代碼
ComboType.IsEnabled = false;
ComboType.Items.Add("超級管理者");
ComboType.Items.Add("管理者");
ComboType.Items.Add("工程師");
ComboType.Items.Add("操作員");
ComboType.Items.Add("訪客");
// 設定預設選中項
ComboType.SelectedIndex = 3;
<Window x:Class="FlowFile.UIUser">
<ComboBox x:Name="ComboType" SelectedItem="{Binding Path=ECurType,Mode=TwoWay}" />
</Window>
// 背景代碼
// 需要顯示在combobox下拉清單中的項
public enum EUserType
{
超級管理者,
管理者,
工程師,
操作員,
訪客
}
public partial class UIUser : Window, INotifyPropertyChanged
{
private EUserType m_eCurType; // 目前使用者等級
public EUserType ECurType { get => m_eCurType; set { m_eCurType = value; OnPropertyChanged("ECurType"); } }
// 雙向綁定
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged(string strName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strName));
}
public UIUser()
{
ComboType.ItemsSource = System.Enum.GetValues(typeof(EUserType));
}
}
運作效果: // EUnitType是一個枚舉型,m_SubType是ComboBox控件
foreach (EUnitType item in EUnitType.GetValues(typeof(EUnitType)))
{
m_SubType.Items.Add(item.ToString());
}
- 綁定枚舉類型—ObjectDataProvider雙向綁定
<Window x:Class="FlowOther.LiquidInfo"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:FlowOther"
xmlns:Lq ="clr-namespace:FlowConsumables;assembly=FlowConsumables"
xmlns:System="clr-namespace:System;assembly=mscorlib"
mc:Ignorable="d"
Title="液體" Height="600" Width="800" WindowStartupLocation="Manual">
<Window.Resources>
<ObjectDataProvider x:Key="dataFromEnum" MethodName="GetValues" ObjectType="{x:Type System:Enum}">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="Lq:ELiquidType"/>
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
</Window.Resources>
<Grid>
<DockPanel>
<Grid DockPanel.Dock="Top" Height="135">
<Label Content="液體類型:" Margin="60,15,662,90"/>
<ComboBox Name="m_CmbType" SelectedItem="{Binding Path=ELqType, Mode=TwoWay}" ItemsSource="{Binding Source={StaticResource dataFromEnum}}" Margin="135,15,377,90"/>
<Label Content="廠商名:" Margin="70,55,662,50"/>
<TextBox Text="{Binding StrFacName,Mode=TwoWay}" Margin="135,55,377,50"/>
<Label Content="自定義名:" Margin="55,90,662,15"/>
<TextBox Text="{Binding StrDefName,Mode=TwoWay}" Margin="135,95,377,10"/>
</Grid>
<Grid Height="40" DockPanel.Dock="Bottom" >
<Button Width="80" Height="30" Margin="142,5,370,5" Content="确定" Click="OnClickOK"/>
<Button Width="80" Height="30" Margin="377,5,135,5" Content="取消" Click="OnClickCancel"/>
</Grid>
<StackPanel Grid.Row="1" x:Name="m_Liquid"/>
</DockPanel>
</Grid>
</Window>
背景代碼: // 枚舉類型定義
namespace FlowConsumables
{
// 液體類型
public enum ELiquidType
{
樣品液,
稀釋液,
清洗液
}
}
using FlowConsumables;
using System.ComponentModel;
namespace FlowOther
{
/// <summary>
/// LiquidInfo.xaml 的互動邏輯
/// </summary>
public partial class LiquidInfo : Window, INotifyPropertyChanged
{
private ELiquidType m_eLqType; // 類型
public ELiquidType ELqType { get => m_eLqType; set { m_eLqType = value; OnPropertyChanged("ELqType"); } }
public event PropertyChangedEventHandler PropertyChanged;
protected void OnPropertyChanged(string strName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(strName));
}
}
運作效果: 說明: - ObjectType="{x:Type System:Enum}",其中System是定義在 < xmlns:System=“clr-namespace:System;assembly=mscorlib”>的量。同理,<x:Type TypeName=“Lq:ELiquidType”/>中的“Lq”也是從其他項目包括過來的。
- <ComboBox Name=“m_CmbType” SelectedItem="{Binding Path=ELqType, Mode=TwoWay}" ,path變量要用視窗上下文中的枚舉對象指派(本例中的m_eLqType,使用其屬性ELqType )。
- 注意:ObjectDataProvider MethodName=“GetValues” 方法名要寫對,出現過兩次綁定失敗是由方法名寫錯導緻的。
- 拓展:同樣的綁定方式可用于ListBox控件