2011-06-20 115 views
2

我似乎得到一個綁定的錯誤與一個數據網格上的SelectedItems集合綁定到我的ViewModel中的通用列表。WPF綁定錯誤Datagrid轉換器SelectedItems

<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)' 

編輯:(編輯標題)我綁定到我想要的功能的datagrid的錯誤屬性。我已經編輯了上面的XAML ...我想綁定到SelectedItems,這是複數,不SelectedItem,所以我可以selectr多行並將它們綁定到我的ViewModel中的列表...

我沒有得到上面的綁定錯誤,我剛剛得到一個:

Error 1 'SelectedItems' property is read-only and cannot be set from markup. 

那麼我該如何綁定它呢?

回答

3

的ItemsSource = 「{綁定路徑= ListOfObjects}」

是類型Entities.MyType的,所以你必須綁定到你的虛擬機中的這種類型的屬性。

btw你可以綁定到SelectedItem而不是SelectedItems!

你可以做的是傳遞SelectedItems與CommandParameters。

<Button Command="{Binding DeleteCommand}" CommandParameter="{Binding ElementName=MyDataGrid, Path=SelectedItems}" /> 

SelectedItems是IList類型!

+0

謝謝blindmeis ...我剛纔在代碼中注意到了這個問題!我已經使用SelectedItem的綁定工作,我現在將功能擴展到SelectedItems ...這是我現在的問題。我編輯了這個問題並標記了你的答案,因爲對於所有密集的目的你是對的,而且我錯了! – tigerswithguitars

+0

如果您不想使用Command解決方法,那麼SelectedItems和Datagrid周圍會有一些AttachedPropeties。例如:http://blogs.msdn.com/b/keithjones/archive/2009/10/02/multiple-selection-in-a-datagrid-should-be-bindable.aspx – blindmeis

+0

Niffty代碼...沒有錯誤和它會調用gets ...所以我想它會很好。只需要安裝人員即可工作。看起來好像有一段時間需要花費時間去理解這堂課。我想這比通過食譜做得更好。你說的是什麼命令解決方法?我是一個渴望學習者! – tigerswithguitars

0

ListOfObjects中的對象應改爲具有一些IsSelected屬性; AFAIK你不能綁定到SelectedItems。

可以IsSelected屬性然後結合DataGridRow的IsSelected屬性:

<DataGrid.Resources> 
    <Style TargetType="DataGridRow"> 
     <Setter Property="IsSelected" Value="{Binding IsSelected, Mode=TwoWay}" /> 
+0

謝謝你的提示...我已經注意到,我在我的代碼所需的功能(寫SO質疑是一個很好的鍛鍊調試)做了一個微小的錯誤並且這種變化帶來了新的錯誤!我已經根據這個編輯了上述問題。 – tigerswithguitars

0

我只是想添加一塊有用的代碼到@blindmeis的答案。

當您使用@blindmeis示例的綁定時,您將獲得SelectedItems作爲對象。我需要一些時間才能找到如何將它投射到IList。在這裏,您有:

private void DeleteCommand(object param) { 
System.Collections.IList itemsList = (System.Collections.IList)SelectedItems; 
var collection = items.Cast<item>(); 

}