Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/292.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
UWP c#绑定到ItemsPanel/自定义面板(模板)_C#_Xaml_Windows 10_Uwp - Fatal编程技术网

UWP c#绑定到ItemsPanel/自定义面板(模板)

UWP c#绑定到ItemsPanel/自定义面板(模板),c#,xaml,windows-10,uwp,C#,Xaml,Windows 10,Uwp,我终于用自己的面板创建了一个GridView。布局很好。现在,我希望能够将ViewModel的值绑定到我自己的面板。你能帮我做这个吗。目前我正在更改页面后面代码中的值,我不喜欢 目前,我正在尝试执行x:Bind,我得到一个错误:“对象引用未设置为对象的实例。” 我不知道“正常”绑定是否有帮助。我确实试过,但没有成功 自定义面板 public class PRGD010_GridViewPanel : Panel { public int NumberRowsOrColumns { get

我终于用自己的面板创建了一个GridView。布局很好。现在,我希望能够将ViewModel的值绑定到我自己的面板。你能帮我做这个吗。目前我正在更改页面后面代码中的值,我不喜欢

目前,我正在尝试执行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()
    {
    }
    }
    
    公共类PRGD010\u GridViewPanel:面板
    {
    公共整数箭头或列
    {
    获取{return(int)GetValue(NumberRowsOrColumnsProperty);}
    set{SetValue(NumberRowsOrColumnsProperty,value<1?0:value);}
    }
    public static readonly dependencProperty NumberRowsOrColumnsProperty=dependencProperty.Register(“NumberRowsOrColumns”、typeof(int)、typeof(PRGD010_gridview panel)、新属性元数据(1d、onnumberrowsorcolumnsproperty变更));
    NumberRowsorColumnSPropertyChanged上的私有静态无效(DependencyObject源,DependencyPropertyChangedEventArgs e)
    {
    (来源为PRGD010_GridViewPanel)。无效测量();
    }
    公共整数偏移
    {
    get{return(int)GetValue(StartPositionProperty);}
    set{SetValue(StartPositionProperty,value>=this.NumberRowsOrColumns?this.NumberRowsOrColumns-1:value);}
    }
    public static readonly dependencProperty StartPositionProperty=dependencProperty.Register(“偏移量”、typeof(int)、typeof(PRGD010_GridViewPanel)、new PropertyMetadata(0d、OnStartPositionPropertyChanged));
    私有静态无效OnStartPositionPropertyChanged(DependencyObject源,DependencyPropertyChangedEventArgs e)
    {
    (来源为PRGD010_GridViewPanel)。无效测量();
    }
    公共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>
    
    
    

  • 使用x:Bind时,绑定的上下文是页面或用户控件本身(而不是普通绑定使用的DataContext),因此在代码隐藏中,您需要main_viewmodel、View Model和ref_cat_id的属性。如果其中一个或多个为null或不存在,这就解释了你得到的错误

    我确实有所有这些的值。我想这可能是和ItemsPanel有关?!是的,可以。在xaml中注释掉ItemsPanel。如果它工作正常,您就知道这是自定义GridViewPanel的问题。