UWP c#绑定到ItemsPanel/自定义面板(模板)
我终于用自己的面板创建了一个GridView。布局很好。现在,我希望能够将ViewModel的值绑定到我自己的面板。你能帮我做这个吗。目前我正在更改页面后面代码中的值,我不喜欢 目前,我正在尝试执行x:Bind,我得到一个错误:“对象引用未设置为对象的实例。” 我不知道“正常”绑定是否有帮助。我确实试过,但没有成功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
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()
{
}
}
<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的问题。