2016-12-18 36 views
0

我有一个wpf桌面应用程序。从绑定复选框中获取价值的关键

我有一个combox盒子,它绑定到一个字典对象。

<ComboBox ItemsSource="{Binding MyData}" DisplayMemberPath="Value.Login" 
    SelectedItem="{Binding MySelectedUser }" SynchronizedWithCurrentItem="True" /> 

,并在我的VM:

public Dictionary<string,UserRecord> Users 
{ 
    get 
    { 
     return 'A Dictionary Defined Data' 
    } 
     set { _Users = value; RaisePropertyChanged("Users"); } 
    } 
} 

public UserRecord SelectedUser 
{ 
    get { return _SelectedUser; } 
    set { _SelectedUser = value; 
     RaisePropertyChanged(InformedWorkerCommon.Constants.VM_SelectedUser); 
    } 
} 

当我从下拉列表中选择一个项目我得到的错误是:

System.Windows.Data Error: 23 : Cannot convert '[ADMIN, UI.InformedWorkerViewModel.UserRecord]' from type 'KeyValuePair`2' to type 'UI.InformedWorkerViewModel.UserRecord' for 'en-US' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: TypeConverter cannot convert from System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[UI.InformedWorkerViewModel.UserRecord, UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. 
    at System.ComponentModel.TypeConverter.GetConvertFromException(Object value) 
    at System.ComponentModel.TypeConverter.ConvertFrom(ITypeDescriptorContext context, CultureInfo culture, Object value) 
    at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward)' 
System.Windows.Data Error: 7 : ConvertBack cannot convert value '[ADMIN, UI.InformedWorkerViewModel.UserRecord]' (type 'KeyValuePair`2'). BindingExpression:Path=HeartBeat.CommonData.LogIn.SelectedUser; DataItem='ApplicationViewModel' (HashCode=43160662); target element is 'MetroComboBox' (Name=''); target property is 'SelectedItem' (type 'Object') NotSupportedException:'System.NotSupportedException: TypeConverter cannot convert from System.Collections.Generic.KeyValuePair`2[[System.String, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089],[UI.InformedWorkerViewModel.UserRecord, UI, Version=1.0.0.0, Culture=neutral, PublicKeyToken=null]]. 
    at MS.Internal.Data.DefaultValueConverter.ConvertHelper(Object o, Type destinationType, DependencyObject targetElement, CultureInfo culture, Boolean isForward) 
    at MS.Internal.Data.ObjectTargetConverter.ConvertBack(Object o, Type type, Object parameter, CultureInfo culture) 
    at System.Windows.Data.BindingExpression.ConvertBackHelper(IValueConverter converter, Object value, Type sourceType, Object parameter, CultureInfo culture) 

我最初使用列表和它的所有工作但我需要使用Dictionary集合类型。我只是难住(和谷歌)的解决方案。

任何指针/教育我将不胜感激。

谢谢!

+0

@MetroSmurf谢谢,并将删除,如果适用 –

+0

@closers solutuion从重复answr没有什么区别。它不适合我 –

+1

@closers我的错我没有正确阅读。将我删除ina第二次后,我说谢谢其他海报:) –

回答

1

你需要告诉你的组合框什么显示什么持有的价值:

SelectedValuePath="Value" DisplayMemberPath="Key" 

现在,既然你正在使用Dictionary<string, UserRecord>,您的组合框将返回字典中的一项作为SelectedValue。那一个项目是KeyValuePair<string, UserRecord>,因此它不能被铸造到UserRecord(这是错误抱怨)。

+0

这没有什么区别我害怕。同样的错误:( –

+0

你的编辑有道理,但仍不知道如何纠正 –

+0

尝试切换价值的钥匙,反之亦然 – CodingYoshi

0

Solution

DisplayMemberPath="Value" 

我认为这是可以正常工作

+0

键值不为^^ – mty

+0

如果此问题与您在此链接的问题重复,请将其标记为与问题下的“标志”按钮重复,而不是留下回答那种效果。如果它不是重复的,那么请留下一个完整的答案,而不是只有链接的答案 – Marusyk

+0

lol对不起,多重输入这里不同的东西请忽略它 –