我正在研究WPF上的一个项目,我必须创建一些用户控件。现在我正在开发一个导航栏,它允许我浏览数据网格,所以在我的XAML文件中我需要将datagrid对象传递给导航栏,但它无法正常工作。
我的导航栏如下:
<my:NavigationBar Data="{Binding ElementName=dataGrid1}" HorizontalAlignment="Left" Margin="6,6,0,0" Name="navigationBar1" VerticalAlignment="Top" />
我的数据网格如下:
<DataGrid AutoGenerateColumns="True" Margin="11,46,12,9" Name="dataGrid1" />
我导航栏后面的代码如下:
public static readonly DependencyProperty dataProperty =
DependencyProperty.Register("Data",
typeof(DataGrid), typeof(NavigationBar));
private DataGrid dataGrid;
public DataGrid Data
{
get
{ return dataGrid; }
set
{ dataGrid = value; }
}
如您所见,我尝试将控件发送到导航栏:
Data="{Binding ElementName=dataGrid1}"
但是当我尝试在后面的代码中使用dataGrid变量时,会引发异常,因为dataGrid变量指向null。
所以,我错误地传递了控件吗?我究竟做错了什么?我的方法是最合适的吗?
提前谢谢。
答案 0 :(得分:1)
DataGrid旨在以人类可读的方式显示数据 - 您不应将其作为DataSource传递到控件中。尝试将您的导航栏绑定到与datagrid1相同的数据源
答案 1 :(得分:0)
虽然我同意Andriy认为可能有更好的方法来解决这个问题,但我确实发现你在做依赖属性的方式存在问题。
DependencyProperty的后备属性不正确。你不应该只是获得并设置一个常规值。相反,您应该使用SetValue和GetValue方法。
应该是:
public DataGrid Data
{
get
{ return (DataGrid) GetValue(dataProperty); }
set
{ SetValue(dataProperty); }
}