![](/img/trans.png)
[英]Pass ObservableCollection<> type as dependency property
[英]UWP Dependency Property of type object not binding to ObservableCollection
我有一個帶有RadDataGrid和ListView的自定義UserControl。 UserControl有一個ItemsSource,在對數據進行一些內部操作之后,該ItemsSource填充RadDataGrid和ListView的ItemsSource屬性。
填充后,我想將RadDataGrid的ItemsSource屬性公開給我的視圖模型。
為此,我在文件后面的代碼中創建一個依賴項屬性“ GridItemsSource”,並在UserControl的XAML文件中使用TwoWay綁定,如下所示:
public static readonly DependencyProperty GridItemsSourceProperty = DependencyProperty.Register(nameof(GridItemsSource), typeof(object), typeof(ListViewGrid), new PropertyMetadata(null, OnItemsSourceChanged));
public object GridItemsSource
{
get { return GetValue(GridItemsSourceProperty); }
set { SetValue(GridItemsSourceProperty, value); }
}
和:
<grid:RadDataGrid x:Name="DataGrid"
Grid.Column="1"
UserGroupMode="Disabled"
AutoGenerateColumns="False"
ItemsSource="{x:Bind GridItemsSource, Mode=TwoWay}"
SelectedItem="{x:Bind SelectedGridItem, Mode=TwoWay}">
</grid:RadDataGrid>
在我的頁面中,我還具有GridItemsSource屬性的TwoWay綁定,如下所示:
<userControls:ListViewGrid x:Name="ListViewGrid"
GridItemsSource="{x:Bind ViewModel.FormItems, Mode=TwoWay}"
SelectedGridItem="{x:Bind ViewModel.SelectedFormItem, Mode=TwoWay}"/>
在我的ViewModel中:
private ObservableCollection<FormItem> formItems;
public ObservableCollection<FormItem> FormItems
{
get => formItems;
set => Set(ref formItems, value);
}
這對於單獨的“ SelectedGridItem”效果很好,但是當我綁定“ GridItemsSource”時,程序將在Dependency屬性的設置器處停止,並出現以下運行時錯誤:
Unable to cast object of type 'System.Collections.Generic.List1[System.Object]' to type 'System.Collections.ObjectModel.ObservableCollection1[Models.FormItem]
。
為什么會出現此錯誤? 我在其他控件中看到的所有ItemsSource屬性都是對象類型,並且綁定到ObservableCollection並不是問題。
我認為問題在於您在ItemsSource
屬性上使用Mode=TwoWay
。 控件應將ItemsSource
屬性設置為“只讀”。 嘗試僅將GridItemsSource
和ItemsSource
屬性設置為Mode=OneWay
,這樣系統就不會嘗試反映對視圖模型的任何更改,而這可能會導致轉換問題。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.