前提
C#(WPF Prism使用)に関して
コンボボックスのItemsSourceにDictionary<SampleEnum, string> をバインドしています。コンボボックスに表示されるのはバリューのstringの方です。
ViewModelに、コンボボックスの現在選択されている要素を格納するプロパティSelectedを作成しました。
コンボボックスのSelectedValuePath="Key" に設定されているので、Selectedには、DictionaryのKeyであるSampleEnumがバインドされ、格納される想定でしたが、うまくバインドされていないようで、解決したく質問しました。
実現したいこと
MainWindowViewModelのSelectedプロパティに、SampleEnumがバインドされるようにしたい、
発生している問題・エラーメッセージ
デバッグ時、コンボボックスの選択要素を変更するとXamlバインドエラーが発生する。
Cannot convert '[SampleA, サンプルA]' from type 'KeyValuePair`2' to type 'ComboboxSample.SampleEnum' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: EnumConverter cannot convert from System.Collections.Generic.KeyValuePair`2[[ComboboxSample.SampleEnum, ComboboxSample, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null],[System.String, System.Private.CoreLib, Version=6.0.0.0, Culture=neutral, PublicKeyToken=7cec85d7bea7798e]].
該当のソースコード
MainWindow.xaml
Xalm
1<Window x:Class="ComboboxSample.Views.MainWindow" 2 xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 3 xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 4 xmlns:prism="http://prismlibrary.com/" 5 xmlns:viewmodels="clr-namespace:ComboboxSample.ViewModels" 6 xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 7 d:DataContext="{d:DesignInstance Type=viewmodels:MainWindowViewModel, IsDesignTimeCreatable=True}" 8 xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 9 mc:Ignorable="d" 10 prism:ViewModelLocator.AutoWireViewModel="True" 11 Title="{Binding Title}" Height="350" Width="525" > 12 <Grid> 13 <ContentControl prism:RegionManager.RegionName="ContentRegion" /> 14 <ComboBox Height="20" Width="100" 15 ItemsSource="{Binding SampleEnums}" 16 SelectedValuePath="Key" 17 DisplayMemberPath="Value" 18 SelectedItem="{Binding Selected}" 19 SelectedIndex="0"/> 20 </Grid> 21</Window>
MainWindowViewModel.cs
C#
1using Prism.Mvvm; 2using System.Collections.Generic; 3 4namespace ComboboxSample.ViewModels 5{ 6 public class MainWindowViewModel : BindableBase 7 { 8 public SampleEnum Selected{ get; set; } 9 public Dictionary<SampleEnum, string> SampleEnums { get; set; } 10 public MainWindowViewModel() 11 { 12 SampleEnums = new Dictionary<SampleEnum, string>() 13 { 14 {SampleEnum.SampleA, "サンプルA" }, 15 { SampleEnum.SampleB, "サンプルB" }, 16 { SampleEnum.SampleC, "サンプルC" } 17 }; 18 } 19 } 20}
SampleEnum.cs
C#
1namespace ComboboxSample 2{ 3 public enum SampleEnum 4 { 5 SampleA, 6 SampleB, 7 SampleC 8 } 9}
補足情報(FW/ツールのバージョンなど)
C#10.0
.NET6.0
WPF
Prism.Unity8.1.97
Visual Studio2022

回答1件
あなたの回答
tips
プレビュー
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。