スキマー向け。質問は、太字のテキストの直後の下部にあります。
ComboBox
を使用して、を列挙型にデータバインディングしていObjectDataProvider
ます。ObjectDataProvider
とても簡単です。
<ObjectDataProvider x:Key="FaultAreaValues"
ObjectType="{x:Type FaultTrackCoreDBValues:FaultAreas}"
MethodName="GetValues">
<ObjectDataProvider.MethodParameters>
<x:Type TypeName="FaultTrackCoreDBValues:FaultAreas" />
</ObjectDataProvider.MethodParameters>
</ObjectDataProvider>
ComboBox
viaをデータバインドしItemsSource
ます。これも簡単です。
ItemsSource="{Binding Source={StaticResource FaultAreaValues}}"
これはすべて正常に機能します。ComboBox
には、列挙からの適切な値が入力されます。私もMVVMパターンを使用しているので、ビューDataContext
は関連するのインスタンスに設定されますViewModel
。これは次のようになります(トリミングされます)。
public class ViewModel : INotifyPropertyChanged
{
private IFault _Fault;
public IFault Fault {
get {
return _Fault;
}
set {
_Fault = value;
OnPropertyChanged("Fault");
}
}
}
そしてモデル:
public interface IFault
{
FaultAreas Area { get; set; }
}
public partial class Fault : IFault, INotifyPropertyChanged
{
FaultAreas IFault.Area {
get {
return (FaultAreas)Area;
}
set {
Area = (Int32)value;
}
}
}
Fault
これは、実際Entity
にはエンティティデータモデルにある部分的なクラスであることに注意することが重要です。Entityは.NET4.5およびEntityFramework4.5より前の列挙をサポートしていないため、明示的なインターフェイスを使用してそのサポートを追加し、Entityオブジェクトについて何も知らないようにすべてを完全に切り離します。
実際のSelectedItem
バインディングは次のとおりです。
SelectedItem="{Binding Fault.Area}"
問題は、ComboBoxの選択が最初に設定されることはなく、選択を変更すると装飾者が表示され、次の例外が発生することです。
System.Windows.Dataエラー:23:デフォルトの変換では「en-US」カルチャの「Behavior」を「FaultAreas」タイプから「System.Int32」タイプに変換できません。BindingのConverterプロパティの使用を検討してください。NotSupportedException:'System.NotSupportedException:Int32ConverterはFaultTrack.Core.DBValues.FaultAreasから変換できません。System.ComponentModel.TypeConverter.GetConvertFromException(オブジェクト値)at System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContextコンテキスト、CultureInfoカルチャ、オブジェクト値)at System.ComponentModel.BaseNumberConverter.ConvertFrom(ITypeDescriptorContextコンテキスト、CultureInfoカルチャ、オブジェクト値)MS .Internal.Data.DefaultValueConverter.ConvertHelper(Object o、Type destinationType、DependencyObject targetElement、CultureInfoculture、
何が原因かわかりません。ViewModelのプロパティに直接バインドすることでエラーを解決できますFaultAreas
が、それは私がやりたいことではありません。IFault
モデルのインスタンスにバインドして、このエラーが発生する理由を理解したいと思います。