如何将控件传递给WPF中的属性?

时间:2012-05-21 18:07:44

标签: wpf xaml user-controls

我正在研究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。

所以,我错误地传递了控件吗?我究竟做错了什么?我的方法是最合适的吗?

提前谢谢。

2 个答案:

答案 0 :(得分:1)

DataGrid旨在以人类可读的方式显示数据 - 您不应将其作为DataSource传递到控件中。尝试将您的导航栏绑定到与datagrid1相同的数据源

答案 1 :(得分:0)

虽然我同意Andriy认为可能有更好的方法来解决这个问题,但我确实发现你在做依赖属性的方式存在问题。

DependencyProperty的后备属性不正确。你不应该只是获得并设置一个常规值。相反,您应该使用SetValue和GetValue方法。

应该是:

public DataGrid Data
    {
        get
        { return (DataGrid) GetValue(dataProperty); }
        set
        { SetValue(dataProperty); }
    }

请参阅:http://www.wpftutorial.net/DependencyProperties.html