我似乎在将一个datgrid上的SelectedItems集合绑定到我的ViewModel中的泛型列表时遇到绑定错误。
<DataGrid ItemsSource="{Binding Path=ListOfObjects}" SelectionMode="Extended" SelectionUnit="FullRow" SelectedItems="{Binding Path=ListOfSelectedObjects}" IsEnabled="{Binding Path=IsDoingNothing}">
这是管道位...当我尝试从DataGrid中选择一个项目时,我得到的错误会在运行时抛出。它似乎与默认值转换器有关,它将'SelectedItem'对象转换为我定义的类型。
我做了一点阅读,我想我需要某种价值转换器?但是我对此有点新意,如果有人可以参考一些可以帮助我解决这个问题/数据网格管道/应用程序的例子,我会很喜欢它。
System.Windows.Data Error: 23 : Cannot convert 'Stored Data Backup' from type 'MyType' to type 'System.Collections.Generic.List`1[Entities.MyType]' for 'en-GB' culture with default conversions; consider using Converter property of Binding. NotSupportedException:'System.NotSupportedException: CollectionConverter cannot convert from Entities.MyType.
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 'Stored Data Backup' (type 'MyType'). BindingExpression:Path=SelectedExcludedMyType; DataItem='MyTypeManagerViewModel' (HashCode=20097682); target element is 'DataGrid' (Name=''); target property is 'SelectedItem' (type 'Object') NotSupportedException:'System.NotSupportedException: CollectionConverter cannot convert from Dytecna.V001.Entities.MyType.
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)'
编辑:(编辑标题)我绑定到数据网格的错误属性为我所需的功能。我已经编辑了上面的XAML ...我想绑定到SelectedItems,这是复数,而不是SelectedItem,所以我可以selectr多行并将它们绑定到我的ViewModel中的列表......
我没有得到上面的绑定错误,我只是得到了一个:
Error 1 'SelectedItems' property is read-only and cannot be set from markup.
那么如何绑定它?
答案 0 :(得分:3)
ItemsSource =“{Binding Path = ListOfObjects}”
的类型为Entities.MyType,因此您必须在vm中绑定此类型的属性。
顺便说一下,你可以绑定到SelectedItem而不是SelectedItems!
您可以做的是使用CommandParameters传递SelectedItems。
<Button Command="{Binding DeleteCommand}" CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}" />
SelectedItems是IList的类型!
答案 1 :(得分:0)
ListOfObjects中的对象应该具有一些IsSelected属性; AFAIK你无法绑定到SelectedItems。
然后,您可以将IsSelected属性绑定到DataGridRow的IsSelected属性:
<DataGrid.Resources>
<Style TargetType="DataGridRow">
<Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" />
答案 2 :(得分:0)
我只想在@blindmeis回答中添加一些有用的代码。
当您使用@blindmeis示例中的绑定时,您将获得SelectedItems作为对象。我花了一些时间来找到如何将它投射到IList。你在这里:
private void DeleteCommand(object param) {
System.Collections.IList itemsList = (System.Collections.IList)SelectedItems;
var collection = items.Cast<item>();
}