--- lang: ja-jp breaks: true --- # WinUI 3 コンボボックスにEnum型をバインドして使用する 2022-07-29 ## MainWindow.xaml ```xaml= <Window x:Class="App25.MainWindow" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App25" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" mc:Ignorable="d" xmlns:viewModels="clr-namespace:App25.viewModels" > <Grid> <StackPanel > <ComboBox Header="Nuget Organizations" PlaceholderText="Nuget Organizations" Width="400" ItemsSource="{x:Bind ViewModel.Organizations, Mode=OneTime}" SelectedItem="{x:Bind ViewModel.Organization, Mode=TwoWay}" /> </StackPanel> </Grid> </Window> ``` :::info 選択された項目をバインドするプロパティは、`SelectedItem`を使用する。 ::: ## MainWindow.xaml.cs ```csharp= namespace App25; /// <summary> /// An empty window that can be used on its own or navigated to within a Frame. /// </summary> public sealed partial class MainWindow : Window { private MainWindowViewModel ViewModel { get; init; } public MainWindow() { this.InitializeComponent(); ViewModel = new MainWindowViewModel(); } } ``` ## MainWindowViewModel.cs ```csharp= namespace App25.viewModels; internal sealed class MainWindowViewModel: INotifyPropertyChanged { public enum Organization { orgs, user } public IReadOnlyList<Organization> Organizations { get { return Enum.GetValues<Organization>(); } } private Organization? m_organization; public GithubPackagesAPI.Organization? Organization { get { return this.m_organization; } set { if (value == this.m_organization) { return; } this.m_organization = value; OnPropertyChanged(nameof(Organization)); } } public event PropertyChangedEventHandler PropertyChanged; public event PropertyChangedEventHandler PropertyChanged_Organization; private void OnPropertyChanged([System.Runtime.CompilerServices.CallerMemberName] string propertyName = null) { PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName)); switch (propertyName) { case nameof(Organization): PropertyChanged_Organization?.Invoke(this, new PropertyChangedEventArgs(propertyName)); break; } } } ``` :::warning コンボボックスの`ItemsSource`にバインドするリストは、`Enum.GetValues<Organization>()`か、`FastEnumUtility.FastEnum.GetValues<GithubPackagesAPI.Organization>().ToArray()`でも可能。 `FastEnumUtility.FastEnum.GetValues<GithubPackagesAPI.Organization>()`では、`SelectedItem`が正常にバインドできなかった。 ::: ###### tags: `WinUI 3` `コンボボックス` `Combobox`
×
Sign in
Email
Password
Forgot password
or
By clicking below, you agree to our
terms of service
.
Sign in via Facebook
Sign in via Twitter
Sign in via GitHub
Sign in via Dropbox
Sign in with Wallet
Wallet (
)
Connect another wallet
New to HackMD?
Sign up