実現したいこと
Visual Studio Community 2022 Preview 17.13.0 Preview2.0
.net9.0 C# LangVersionはPreview(Projectファイルに追加) CommunityToolkit.Mvvm 8.40 の環境で.net8.0から強化されたWinFormsのBindingについて検証しています。ComboBoxでのBindingで、WPFでは実現できるのですが、WinFormsでは実現できないことがあります。
発生している問題・分からないこと
ViewModelは同じ内容のものを使用しています。ComboBoxの選択を変更したときに、TextBoxに選択内容を表示しようとしています。WPFではドロップダウンリストで選択したものがTextBoxに表示できるのですが、WinFormsでは表示できません。WinFormsのComboBoxの仕様なのか、プログラムミスなのかわからない状況です。
該当のソースコード
WPF MainWindow.xaml
C#
1<Window x:Class="A02_DialogBinding.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 5 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 6 xmlns:local="clr-namespace:A02_DialogBinding" 7 mc:Ignorable="d" 8 Title="MainWindow" Height="450" Width="800"> 9 <Window.DataContext> 10 <local:MainViewModel /> 11 </Window.DataContext> 12 <Grid> 13 <TextBox HorizontalAlignment="Left" Margin="197,196,0,0" TextWrapping="Wrap" VerticalAlignment="Top" Width="120" Text="{Binding ComboSelectItem}"/> 14 <ComboBox HorizontalAlignment="Center" Margin="0,196,0,0" VerticalAlignment="Top" Width="120" ItemsSource="{Binding ComboItems}" SelectedItem="{Binding ComboSelectItem}"/> 15 </Grid> 16</Window>
WPF MainViewModel
C#
1using System.Collections.ObjectModel; 2using CommunityToolkit.Mvvm.ComponentModel; 3 4namespace A02_DialogBinding; 5 6public partial class MainViewModel : ObservableObject 7{ 8 public MainViewModel() 9 { 10 ComboItems = ["Item 1", "Item 2", "Item 3"]; 11 ComboSelectItem = ComboItems[2]; 12 } 13 14 /// <summary> 15 /// Combobox用Itemsのデータを保持するコレクション 16 /// </summary> 17 [ObservableProperty] 18 public partial ObservableCollection<string> ComboItems { get; private set; } 19 20 /// <summary> 21 /// Comboboxで選択されたItem 22 /// </summary> 23 [ObservableProperty] 24 public partial string ComboSelectItem { get; set; } 25}
WinForms Form3 TextBoxとComboBoxを配置
C#
1namespace Advance.Trial.Binding; 2 3public partial class Form3 : Form 4{ 5 private readonly Form3ViewModel? _viewModel; 6 7 public Form3() 8 { 9 InitializeComponent(); 10 11 _viewModel = new Form3ViewModel(); 12 comboBox1.DataBindings.Add(nameof(comboBox1.DataSource), _viewModel, nameof(_viewModel.ComboItems)); 13 comboBox1.DataBindings.Add(nameof(comboBox1.SelectedItem), _viewModel, nameof(_viewModel.ComboSelectItem), false, 14 DataSourceUpdateMode.OnPropertyChanged); 15 textBox1.DataBindings.Add(nameof(textBox1.Text), _viewModel, nameof(_viewModel.ComboSelectItem), false, 16 DataSourceUpdateMode.OnPropertyChanged); 17 } 18}
WinForms Form3ViewModel
C#
1using System.Collections.ObjectModel; 2using CommunityToolkit.Mvvm.ComponentModel; 3 4namespace Advance.Trial.Binding; 5 6public partial class Form3ViewModel : ObservableObject 7{ 8 public Form3ViewModel() 9 { 10 ComboItems = ["Item 1", "Item 2", "Item 3"]; 11 ComboSelectItem = ComboItems[2]; 12 } 13 14 /// <summary> 15 /// Combobox用Itemsのデータを保持するコレクション 16 /// </summary> 17 [ObservableProperty] 18 public partial ObservableCollection<string> ComboItems { get; private set; } 19 20 /// <summary> 21 /// Comboboxで選択されたItem 22 /// </summary> 23 [ObservableProperty] 24 public partial string ComboSelectItem { get; set; } 25}
試したこと・調べたこと
- teratailやGoogle等で検索した
- ソースコードを自分なりに変更した
- 知人に聞いた
- その他
上記の詳細・結果
terataildeで「CommunityToolkit」「MVVMToolkit」で検索しましたが該当するものがありませんでした。
補足
ソースは上から
WPF MainWindow.xaml
WPF MainViewModel
WinForms Form3 TextBoxとComboBoxを配置
WinForms Form3ViewModel
です。

回答1件
あなたの回答
tips
プレビュー