У меня есть собственный выпадающий элемент управления, добавленный к каждому элементу в ListView. Список элементов, который передает выпадающий список, является объектом коллекции, который наследуется от ObservableCollection <>. Существует свойство зависимости в пользовательском элементе управления для объекта коллекции. При связывании с x: Type это не удается в ListView для GetValue (). Это не дает сбоя, когда в UserControl.
Я могу обойти это, связавшись с типом во ViewModel.
Заголовок представления списка и представление, что GridViewColumn содержится в:
<ListView x:Name="InventoryTrackingEntryListView" ItemsSource="{Binding View.Inventory_Items}"
<ListView.View>
<GridView ColumnHeaderContainerStyle="{StaticResource SBTGridViewColumHeaderStyle}">
</GridView>
</ListView.View>
</ListView>
Это работает в виде списка. Я привязываюсь к свойству Type с именем CollectionType.
<GridViewColumn Header="Kardex Bin" admin:ListViewSorter.SortBindingMember="KardexBinId">
<GridViewColumn.CellTemplate>
<DataTemplate>
<admin:ActiveDDLControl Margin="5" d:DataContext="{d:DesignInstance model:Physical_Tracking}" MinWidth="50"
admin:ActiveDDL.CollectionType="{Binding CollectionType}"
admin:ActiveDDL.ValueId="{Binding KardexBinId, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Это не работает в представлении списка. Пользовательский элемент управления ActiveDDLControl работает в пользовательском элементе управления с использованием x: Type.
<GridViewColumn Header="Kardex Bin" admin:ListViewSorter.SortBindingMember="KardexBinId">
<GridViewColumn.CellTemplate>
<DataTemplate>
<admin:ActiveDDLControl Margin="5" d:DataContext="{d:DesignInstance model:Physical_Tracking}" MinWidth="50"
admin:ActiveDDL.CollectionType="{x:Type model:IKardexBin}"
admin:ActiveDDL.ValueId="{Binding KardexBinId, Mode=TwoWay}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
Так выглядит ActiveDDLControl в пользовательском элементе управления, и он работает
<admin:ActiveDDLControl Grid.Row="19" Grid.Column="7" Margin="5" IsEnabled="{Binding ElementName=IsWriteOnly, Path=IsChecked}"
admin:ActiveDDL.CollectionType="{x:Type model:IKardexBin}"
admin:ActiveDDL.ValueId="{Binding KardexBinId, Mode=TwoWay}"/>
Настройка свойства зависимости
CollectionTypeProperty = DependencyProperty.RegisterAttached("CollectionType",
typeof(Type), typeof(ActiveDDL), new FrameworkPropertyMetadata(null, OnCollectionTypePropertyChanged));
public static object GetCollectionType(DependencyObject d) => d.GetValue(CollectionTypeProperty);