4

全部,

我有一个 WPF 应用程序,它有一个绑定到 ItemsSource=MyContext.Entity1.Local 的 DataGrid 控件(这是一个 ObservableCollection)。这个应用程序内部是一个 DataGridComboBoxColumn,如下所示:

<DataGridComboBoxColumn Header="User"
                        SelectedValueBinding="{Binding Path=USR_ID, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                        SelectedItemBinding="{Binding Path=TBL_USR, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                        ItemsSource="{Binding Path=MyEntity.TBL_USR, UpdateSourceTrigger=PropertyChanged, Source={StaticResource VM}}"
                        SelectedValuePath="USR_ID"
                        DisplayMemberPath="USR_WINLOGON" />

我的问题是我收到以下错误:

System.Windows.Data Error: 1 : Cannot create default converter to perform 'two-way' conversions between types MyContextType.TBL_USR' and 'System.String'. Consider using Converter property of Binding. BindingExpression:Path=TBL_USR; DataItem='Entity1Cl_4FDC0A147BE18671D96960BD8695EC4E3656B773570659474EE4FF228884E823' (HashCode=7143675); target element is 'DataGridCell' (Name=''); target property is 'CellContent' (type 'String')
System.Windows.Data Error: 5 : Value produced by BindingExpression is not valid for target property.; Value='System.Data.Entity.DynamicProxies.TBL_USR30704B5EF5DAA11FBF2C9B305F529659FBCF422ED6696643EDB375A5D77F5A96' BindingExpression:Path=TBL_USR; DataItem='Entity1Cl_4FDC0A147BE18671D96960BD8695EC4E3656B773570659474EE4FF228884E823' (HashCode=7143675); target element is 'DataGridCell' (Name=''); target property is 'CellContent' (type 'String')

我认为它与 DynamicProxies 有关,但我无法弄清楚是什么导致了这个(.Local?),以及如何围绕这个进行编码(至少,不是不使用 TypeConverter 和 Reflection,哎呀)。

要么就是这样,要么与 WPF 行为不端有关(但我在上面的标记中找不到我试图将我的实体设置为字符串的任何地方)。

所以我问,有谁知道我可以如何强制 Entity1.Local[n].TBL_USR 成为 TBL_USR,或者如果可能有另一种方式(没有反射)我可以设置我的 SelectedItemBinding?

谢谢。

我正在使用 EF 4.4(数据库优先)和 .Net 4.0。

4

1 回答 1

3

事实证明这是由于 Mode=TwoWay 和幕后某些不可见的绑定(对于剪贴板之类的东西)。我曾尝试使用字符串转换器,但是当列失去焦点时,它会产生奇怪的效果,即移除值的显示。这个问题的答案在这里:

当我离开它时,为什么我的 DataGridComboBoxColumn 会清除它的值?

事实证明,这也是这个问题的答案。

于 2014-12-10T00:01:26.403 回答