Ligação Datagrid em WPF
Eu sei que isso já foi perguntado, mas eu fiz quase tudo o que é sugerido pelos desenvolvedores.
<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>
estou a tentar mostrar isto na caixa de diálogo modal e a popularizar a lista de licenças no construtor da caixa de diálogo modal. Mas ainda nada está a ser povoado dentro do datagrid.
Código do Construtor:
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; }
}
}
Vocês acham que tem alguma coisa a ver com a lista de objectos?
3 answers
Por favor, não utilize o objecto como nome de classe:
public class MyObject //better to choose an appropriate name
{
string id;
DateTime date;
public string ID
{
get { return id; }
set { id = value; }
}
public DateTime Date
{
get { return date; }
set { date = value; }
}
}
Você deve implementar INotifyPropertyChanged
para esta classe e, claro chamá-lo no setter de propriedade. Caso contrário, as alterações não se refletem na sua IU.
A sua classe/ janela de modelos de visualização deve ter uma Property
da tua lista. ObservableCollection<MyObject>
é o caminho a seguir:
public ObservableCollection<MyObject> MyList
{
get...
set...
}
No seu xaml
deve colocar o Itemssource
na sua colecção de MyObject
. (o Datacontext
tem de ser a tua caixa de diálogo classe!)
<DataGrid ItemsSource="{Binding Source=MyList}" AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding ID}"/>
<DataGridTextColumn Header="Date" Binding="{Binding Date}"/>
</DataGrid.Columns>
</DataGrid>
Sem ver essa lista de objectos, acredito que devas estar ligado à propriedade de DataGrid, não à sua 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>
(isto assume que o elemento [UserControl, etc.] that contains the DataGrid has its DataContext bound to an object that contains the list
collection. O DataGrid é derivado de ItemsControl
, que se baseia na sua propriedade ItemsSource
para definir a colecção a que se liga as suas linhas. Portanto, se list
não é uma propriedade de um objecto ligado ao seu o DataContext do control, você pode precisar definir tanto DataContext={Binding list}
quanto ItemsSource={Binding list}
no DataGrid...)
Tente fazer isto no código atrás
public diagboxclass()
{
List<object> list = new List<object>();
list = GetObjectList();
Imported.ItemsSource = null;
Imported.ItemsSource = list;
}
Certifique-se também de que a sua lista é efectivamente povoada e como mencionado por Blindmeis, nunca use palavras que já são dadas uma função em C#.