【问题标题】:Get Key from Value from Bound CheckBox [duplicate]从绑定复选框的值中获取键[重复]
【发布时间】:2016-12-18 17:59:00
【问题描述】:

我有一个 wpf 桌面应用程序。

我有一个组合框,它绑定到一个字典对象。

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

在我的虚拟机中:

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)

我最初使用的是 List 并且一切正常,但我需要使用 Dictionary 集合类型。我只是难倒(和谷歌搜索)解决方案。

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

谢谢!

【问题讨论】:

  • @MetroSmurf 谢谢,如果合适会删除
  • @closers 来自该重复答案的解决方案没有任何区别。它对我不起作用
  • @closers 我的错我没有正确阅读。在我感谢其他海报后,我会在一秒钟内删除:)
  • @closers。我只是试图删除,我不能。人们需要对此投反对票

标签: c# wpf


【解决方案1】:

您需要告诉您的组合框显示什么以及作为值保存什么:

SelectedValuePath="Value" DisplayMemberPath="Key"

现在,由于您使用的是Dictionary&lt;string, UserRecord&gt;,因此您的组合框将从字典中返回一项作为SelectedValue。那一项是KeyValuePair&lt;string, UserRecord&gt;,因此不能转换为UserRecord(这是错误所抱怨的)。

【讨论】:

  • 恐怕没什么区别。同样的错误:(
  • 您的编辑有道理,但仍然不知道如何更正
  • 尝试将键切换为值,反之亦然
  • @AndrewSimpson 即使使用开关也不起作用?
  • 您好,对不起,它确实与 swicth 一起工作。但这会重复一些人善意链接的另一个答案,因此需要删除谢谢
【解决方案2】:

Solution

DisplayMemberPath="Value"

我认为这可以工作

【讨论】:

  • 键不是值^^
  • 如果此问题与您在此处链接的问题重复,请使用问题下方的“标记”按钮将其标记为重复,而不是留下答案。如果不是重复的,请留下完整的答案,而不是仅链接的答案
  • lol 对不起,这里多输入不同的东西,请忽略它
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2016-06-01
  • 2013-06-29
  • 1970-01-01
  • 2020-05-02
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多