WPF绑定错误Datagrid转换器SelectedItems

时间:2011-06-20 07:55:59

标签: wpf list datagrid binding converter

我似乎在将一个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.

那么如何绑定它?

3 个答案:

答案 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>();

}