2011-04-27 20 views
10

Sé que esto ya se ha pedido, pero he hecho casi todo lo que sugieren los desarrolladores.Unión de cuadrícula de datos en WPF

<DataGrid x:Name="Imported" VerticalAlignment="Top" DataContext="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True"> 
    <DataGrid.Columns>     
     <DataGridTextColumn Header="ID" Binding="{Binding Path=ID}"/> 
     <DataGridTextColumn Header="Date" Binding="{Binding Path=Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 

Estoy tratando de mostrar esto en el cuadro de diálogo modal y rellenar la lista de licencias en el constructor del cuadro de diálogo modal. Pero todavía nada se está poblando dentro de la cuadrícula de datos.

código Constructor:

public diagboxclass() 
{ 
    List<object> list = new List<object>(); 
    list = GetObjectList(); 
} 

public class object 
{ 
    string id; 
    DateTime date; 
    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    public DateTime Date 
    { 
     get { return date; } 
     set { date = value; } 
    } 
} 

piensan ustedes algo que ver con la lista de objetos?

+0

Mi objeto de lista tiene más propiedades que las dos anteriores que no son vinculantes? ¿eso podría hacer cualquier diff? – alice7

+0

Probablemente no. Por favor, comparta un poco más de su XAML (incluida la definición de 'list') para que podamos ayudarlo. –

+0

He agregado el código en la parte superior. – alice7

Respuesta

18

Sin ver dicha lista de objetos, creo que debe vincular a la propiedad ItemsSource del DataGrid, no a su DataContext.

<DataGrid x:Name="Imported" VerticalAlignment="Top" ItemsSource="{Binding Source=list}" AutoGenerateColumns="False" CanUserResizeColumns="True"> 
    <DataGrid.Columns>     
     <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
     <DataGridTextColumn Header="Date" Binding="{Binding Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 

(Esto supone que el elemento [UserControl, etc.] que contiene el DataGrid tiene sus DataContext unidos a un objeto que contiene la colección list. El DataGrid se deriva de ItemsControl, que se basa en su ItemsSource propiedad para definir la colección se une a sus filas. por lo tanto, si list no es una propiedad de un objeto unido a DataContext de su control, puede que tenga que configurar tanto DataContext={Binding list} y ItemsSource={Binding list} en la cuadrícula de datos ...)

+0

. Tampoco funciona con itemsource. Lo he intentado. – alice7

+0

@ alice7 Luego, publique algo de XAML mostrando el resto de su ventana/UserControl/Whatever contains the grid, y díganos cómo se define 'list'. :) –

+0

He eliminado todo el contenido y simplemente salí de la cuadrícula de datos. Así que no hay otro control. Aquí está el código isnide constructor: List objectList = new List (); objectList = GetObjectList(); – alice7

25

pOR FAVOR no use el objeto una un nombre de clase:

public class MyObject //better to choose a appropriate name 
{ 
    string id; 
    DateTime date; 
    public string ID 
    { 
     get { return id; } 
     set { id = value; } 
    } 
    public DateTime Date 
    { 
     get { return date; } 
     set { date = value; } 
    } 
} 

Debe implementar INotifyPropertyChanged para esta clase y, por supuesto lo llaman en la incubadora propiedad. De lo contrario, los cambios no se reflejan en su interfaz de usuario.

Su clase modelo de vista de clase/caja de diálogo debe tener unProperty de su lista MyObject. ObservableCollection<MyObject> es el camino a seguir:

public ObservableCollection<MyObject> MyList 
{ 
    get... 
    set... 
} 

En su xaml se debe configurar el Itemssource a su colección de MyObject. (El Datacontext tiene que ser la clase de caja de diálogo!)

<DataGrid ItemsSource="{Binding Source=MyList}" AutoGenerateColumns="False"> 
    <DataGrid.Columns>     
    <DataGridTextColumn Header="ID" Binding="{Binding ID}"/> 
    <DataGridTextColumn Header="Date" Binding="{Binding Date}"/> 
    </DataGrid.Columns> 
</DataGrid> 
+0

En mi caso, el ItemSource de DataGrid debería ser: ItemsSource = "{Binding MyList}" – RHAD

3

intento de hacer esto en el código detrás

public diagboxclass() 
    { 
     List<object> list = new List<object>(); 
     list = GetObjectList(); 
     Imported.ItemsSource = null; 
     Imported.ItemsSource = list; 
    } 

También asegúrese de que su lista se rellena con eficacia y como se ha mencionado por Blindmeis, nunca use palabras que ya tienen una función en C#.

Cuestiones relacionadas