¿Cómo pasar un control a una propiedad en WPF?

Estoy trabajando en un proyecto en WPF y tengo que crear algunos controles de usuario. En este momento estoy desarrollando una barra de navegación que me permite navegar a través de una cuadrícula de datos, por lo que en mi archivo XAML necesito pasar el objeto de la cuadrícula de datos a la barra de navegación, pero no funciona.

Mi barra de navegación es la siguiente:

<my:NavigationBar Data="{Binding ElementName=dataGrid1}" HorizontalAlignment="Left" Margin="6,6,0,0" Name="navigationBar1" VerticalAlignment="Top" />

Y mi grilla de datos es la siguiente:

<DataGrid AutoGenerateColumns="True" Margin="11,46,12,9" Name="dataGrid1" />

Y mi código detrás de mi barra de navegación es el siguiente:

    public static readonly DependencyProperty dataProperty =
        DependencyProperty.Register("Data",
                                    typeof(DataGrid), typeof(NavigationBar));

    private DataGrid dataGrid;
    public DataGrid Data
    {
        get
        { return dataGrid; }
        set
        { dataGrid = value; }
    }

Como puede ver, trato de enviar el control a la barra de navegación haciendo esto:

Data="{Binding ElementName=dataGrid1}"

Pero cuando trato de usar la variable dataGrid en mi código subyacente, se genera una excepción porque la variable dataGrid apunta a nulo.

Entonces, ¿estoy pasando incorrectamente el control? ¿Qué estoy haciendo mal? ¿Es mi enfoque el más apropiado?

Gracias de antemano.

preguntado el 21 de mayo de 12 a las 19:05

2 Respuestas

DataGrid tiene como objetivo mostrar datos de una manera legible por humanos; no debe pasarlo como DataSource a su control. Intente enlazar su barra de navegación desde la misma fuente de datos que datagrid1

contestado el 21 de mayo de 12 a las 19:05

Gracias por tu respuesta. Pero en realidad necesito navegar a través de los datos que el usuario está viendo. Aun así, ¿debería hacer eso? - Dante

En cuanto a mí, prefiero usar DataSource of datagrid1 - andriy zajarko

Lo he intentado, @Andriy.Zakharko, pero no he podido encontrar un método o una propiedad que devuelva la fuente de datos de la cuadrícula de datos ya que soy realmente nuevo en WPF. ¿Sabes cómo podría obtener el dataSource? - Dante

La propiedad 'ItemsSource' es responsable de las cifras en una cuadrícula. Puede configurarlo así: dataGrid.ItemsSource = someObservableCollection; o en un xaml: - andriy zajarko

Si bien estoy de acuerdo con Andriy en que puede haber una mejor manera de manejar esto, veo un problema en la forma en que está haciendo las Propiedades de dependencia.

Sus propiedades de respaldo para DependencyProperty no son correctas. No se supone que solo obtenga y establezca un valor regular. En su lugar, se supone que debes usar los métodos SetValue y GetValue.

Debería ser:

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

Ver: http://www.wpftutorial.net/DependencyProperties.html

contestado el 21 de mayo de 12 a las 19:05

No es la respuesta que estás buscando? Examinar otras preguntas etiquetadas or haz tu propia pregunta.