Наконец-то мне удалось создать GridView с моей собственной панелью. Макет в порядке. Теперь я хочу иметь возможность привязывать значения моего ViewModel к моей собственной панели. Можете ли вы помочь мне в этом. На данный момент я меняю значения в коде позади страницы, что мне не нравится ...UWP C# Связывание с ItemsPanel/Custom Panel (Template)
На данный момент я пытаюсь сделать x: Bind, и я получаю сообщение об ошибке: " В экземпляре объекта не задана ссылка на объект." Я не знаю, поможет ли «нормальное» привязка. Я действительно пробовал, но без успеха.
Пользовательские панели
public class PRGD010_GridViewPanel : Panel { public int NumberRowsOrColumns { get { return (int)GetValue(NumberRowsOrColumnsProperty); } set { SetValue(NumberRowsOrColumnsProperty, value < 1 ? 0 : value); } } public static readonly DependencyProperty NumberRowsOrColumnsProperty = DependencyProperty.Register("NumberRowsOrColumns", typeof(int), typeof(PRGD010_GridViewPanel), new PropertyMetadata(1d, OnNumberRowsOrColumnsPropertyChanged)); private static void OnNumberRowsOrColumnsPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { (source as PRGD010_GridViewPanel).InvalidateMeasure(); } public int Offset { get { return (int)GetValue(StartPositionProperty); } set { SetValue(StartPositionProperty, value >= this.NumberRowsOrColumns ? this.NumberRowsOrColumns - 1 : value); } } public static readonly DependencyProperty StartPositionProperty = DependencyProperty.Register("Offset", typeof(int), typeof(PRGD010_GridViewPanel), new PropertyMetadata(0d, OnStartPositionPropertyChanged)); private static void OnStartPositionPropertyChanged(DependencyObject source, DependencyPropertyChangedEventArgs e) { (source as PRGD010_GridViewPanel).InvalidateMeasure(); } public PRGD010_GridViewPanel() { } }
XAML:
<GridView ItemsSource="{x:Bind main_viewmodel.prgd010, Mode=OneWay}"> <ItemsControl.ItemsPanel> <ItemsPanelTemplate> <usercontrols:PRGD010_GridViewPanel NumberRowsOrColumns="{x:Bind ViewModel.MyColumns}" Offset="{x:Bind ViewModel.MyOffset" /> </ItemsPanelTemplate> </ItemsControl.ItemsPanel> <GridView.ItemTemplate> <DataTemplate x:DataType="classes:PRGD010_Tag"> <TextBlock Text="{x:Bind ref_cat_id, Mode=OneWay}"/> </DataTemplate> </GridView.ItemTemplate> </GridView>
У меня есть значения для всех этих. Я думал, что это может быть с ItemsPanel ?! – thezapper
Yup, он мог. Прокомментируйте элемент ItemsPanel в xaml. Если это работает, вы знаете, что это проблема с пользовательским GridViewPanel. – Carmine