◆ReactiveCollection を用いて、簡単に ComboBox に新しい ItemsSource を追加する手順
1.準備
●OS:Windows 10 Pro 64bit Version 22H2
●IDE:Visual Studio Community 2022 Version 17.7.3
2.WPFアプリケーション(Prismフレームワーク)
プロジェクトのテンプレートとして Prism Blank App(WPF) を選択して、新しいプロジェクトを作成
3.Nuget
ReactiveProperty.WPF
MaterialDesignThemes【任意】
MaterialDesignColors【任意】
4.App.xaml
001: <prism:PrismApplication x:Class="WPFComboBoxSample.App"
002: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
003: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
004: xmlns:local="clr-namespace:WPFComboBoxSample"
005: xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
006: xmlns:prism="http://prismlibrary.com/" >
007: <Application.Resources>
008: <ResourceDictionary>
009: <ResourceDictionary.MergedDictionaries>
010: <md:BundledTheme
011: BaseTheme="Light"
012: PrimaryColor="DeepPurple"
013: SecondaryColor="Lime" />
014: <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
015: </ResourceDictionary.MergedDictionaries>
016: </ResourceDictionary>
017: </Application.Resources>
018: </prism:PrismApplication>
5.MainWindow.xaml
001: <Window x:Class="WPFComboBoxSample.Views.MainWindow"
002: xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
003: xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
004: xmlns:md="http://materialdesigninxaml.net/winfx/xaml/themes"
005: xmlns:prism="http://prismlibrary.com/"
006: prism:ViewModelLocator.AutoWireViewModel="True"
007: Title="WPFComboBoxSample" Height="350" Width="525" >
008: <Window.Resources>
009: <Style TargetType="ComboBox" x:Key="MenuComb"
010: BasedOn="{StaticResource MaterialDesignOutlinedComboBox}" >
011: <Setter Property="Width" Value="400" />
012: <Setter Property="Margin" Value="10,0,0,0" />
013: <Setter Property="IsEditable" Value="True" />
014: </Style>
015: <Style TargetType="Button" x:Key="CommandBtn"
016: BasedOn="{StaticResource MaterialDesignFlatAccentBgButton}">
017: <Setter Property="FontSize" Value="20" />
018: <Setter Property="Width" Value="100" />
019: <Setter Property="Margin" Value="0,0,0,0" />
020: <Setter Property="IsEnabled" Value="True" />
021: </Style>
022: </Window.Resources>
023: <Grid>
024: <ContentControl prism:RegionManager.RegionName="ContentRegion" />
025:
026: <DockPanel >
027: <ComboBox md:HintAssist.Hint="Site" md:TextFieldAssist.HasClearButton="True"
028: Style="{StaticResource MenuComb}"
029: Text="{Binding SiteText.Value}"
030: ItemsSource="{Binding SiteList}"
031: SelectedValue="{Binding SiteName.Value}" />
032: <Button x:Name="SiteAdd" Content="Add"
033: Style="{StaticResource CommandBtn}"
034: Command="{Binding MainCommand}"
035: CommandParameter="Add" />
036: </DockPanel>
037: </Grid>
038: </Window>
6.MainWindowViewModel.cs
001: using Prism.Commands;
002: using Prism.Mvvm;
003: using Reactive.Bindings;
004:
005: namespace WPFComboBoxSample.ViewModels
006: {
007: public class MainWindowViewModel : BindableBase
008: {
009: // ComboBox.ItemsSource
010: public ReactiveCollection<string> SiteList { get; set; } = new ReactiveCollection<string>();
011: // ComboBox.SelectedValue
012: public ReactiveProperty<string> SiteName { get; set; } = new ReactiveProperty<string>();
013: // ComboBox.Text
014: public ReactiveProperty<string> SiteText { get; set; } = new ReactiveProperty<string>();
015: // Command
016: public DelegateCommand<string> MainCommand { get; }
017:
018: public MainWindowViewModel()
019: {
020: // Command実装
021: MainCommand = new DelegateCommand<string>(ExcuteCommand);
022: // サイトアドレス初期値
023: SiteList.Add("https://www.google.com/");
024: SiteList.Add("https://www.yahoo.co.jp/");
025: SiteList.Add("https://chat.openai.com/auth/login");
026: }
027: private void ExcuteCommand(string _commandParamete)
028: {
029: switch (_commandParamete)
030: {
031: case "Add":
032: AddCommand(); // 新しいサイトアドレスを追加
033: break;
034: }
035: }
036: private void AddCommand()
037: {
038: string _s = SiteText.Value;
039: if (_s != null)
040: { // 新しい行の追加
041: SiteList.Add(_s);
042: }
043: }
044: }
045: }
7.実行
サイトアドレス初期状態
新しいサイトアドレスを入力して、 Add ボタンをクリック
ComboBox のリストに新しいサイトアドレスが追加されている
─以上─