2016-01-11 2 views
0

Наконец-то мне удалось создать GridView с моей собственной панелью. Макет в порядке. Теперь я хочу иметь возможность привязывать значения моего ViewModel к моей собственной панели. Можете ли вы помочь мне в этом. На данный момент я меняю значения в коде позади страницы, что мне не нравится ...UWP C# Связывание с ItemsPanel/Custom Panel (Template)

На данный момент я пытаюсь сделать x: Bind, и я получаю сообщение об ошибке: " В экземпляре объекта не задана ссылка на объект." Я не знаю, поможет ли «нормальное» привязка. Я действительно пробовал, но без успеха.

  1. Пользовательские панели

    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() 
    { 
    } 
    } 
    
  2. 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> 
    

ответ

1

При использовании х: Bind, контекст связывания сама страница или пользователь управления (а чем DataContext, используемый обычным связыванием), поэтому в коде позади вам понадобятся свойства для main_viewmodel, View Model и ref_cat_id. Если один или несколько из них являются нулевыми или не существуют, это объясняет ошибку, которую вы получаете

+0

У меня есть значения для всех этих. Я думал, что это может быть с ItemsPanel ?! – thezapper

+0

Yup, он мог. Прокомментируйте элемент ItemsPanel в xaml. Если это работает, вы знаете, что это проблема с пользовательским GridViewPanel. – Carmine

Смежные вопросы