GetValue для свойства зависимости возвращает значение NULL, если установлено значение X: тип в DataTemplate для GridViewColumn в ListView - PullRequest
0 голосов
/ 24 июня 2019

У меня есть собственный выпадающий элемент управления, добавленный к каждому элементу в 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);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...