我有ObservableCollection
public static ObservableCollection<NahrungsmittelKategorie> NahrungsmittelKategorie
{
get;
set;
}
这nahrungsmittelkategorie.cs
public class NahrungsmittelKategorie
{
public int NahrungsmittelID { get; set; }
public string NahrungsmittelName { get; set; }
public ObservableCollection<Kategorie> NahrungsmittelKategorien { get; set; }
}
这种方法:
ObservableCollection<NahrungsmittelKategorie> ListNahrungsmittel = new ObservableCollection<NahrungsmittelKategorie>();
MySqlConnection connection = SQLConnection.getConnection();
MySqlCommand cmdGetNahrungsmittel = new MySqlCommand("Select ID, Name from t_Nahrungsmittel", connection);
connection.Open();
MySqlDataReader reader = cmdGetNahrungsmittel.ExecuteReader();
while (reader.Read())
{
NahrungsmittelKategorie n = new NahrungsmittelKategorie();
n.NahrungsmittelID = reader.GetInt32(0);
n.NahrungsmittelName = reader.GetString(1);
ListNahrungsmittel.Add(n);
}
connection.Close();
for (int i = 0; i < ListNahrungsmittel.Count; i++)
{
ObservableCollection<Kategorie> ListKategorie = new ObservableCollection<Kategorie>();
MySqlCommand cmdGetKategorien = new MySqlCommand("Select t_kategorie.id, t_kategorie.Kategorie from t_kategorie " +
"inner join t_nahrungsmittelkategorie on t_kategorie.id = t_nahrungsmittelkategorie.kategorie " +
"inner join t_nahrungsmittel on t_nahrungsmittelkategorie.nahrungsmittel = t_nahrungsmittel.id " +
"where t_nahrungsmittel.id = " + ListNahrungsmittel[i].NahrungsmittelID, connection);
connection.Open();
reader = cmdGetKategorien.ExecuteReader();
while (reader.Read())
{
Kategorie k = new Kategorie();
k.KategorieID = reader.GetInt32(0);
k.KategorieKategorie = reader.GetString(1);
ListKategorie.Add(k);
}
connection.Close();
ListNahrungsmittel[i].NahrungsmittelKategorien = ListKategorie;
}
NahrungsmittelKategorie = ListNahrungsmittel;
}
最后这个xaml代码:
<DataGrid x:Name="DataNahrungsmittel" ItemsSource="{Binding Path=NahrungsmittelKategorie}" ColumnWidth="1*" AutoGenerateColumns="False" CanUserReorderColumns="False" CanUserSortColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="ID" Binding="{Binding NahrungsmittelID}"/>
<DataGridTextColumn Header="Nahrungsmittel" Binding="{Binding NahrungsmittelName}"/>
</DataGrid.Columns>
</DataGrid>
我没有在DataGrid中获取值。谁能告诉我什么是错的?我已经测试了很多解决方案。
之后是DataGrid:
如果我收到此代码:
<DataGrid x:Name="DataNahrungsmittel" ItemsSource="{Binding NahrungsmittelKategorie}" ColumnWidth="1*" AutoGenerateColumns="True" CanUserReorderColumns="False" CanUserSortColumns="False">
我得到了这个datagrid:
答案 0 :(得分:1)
如果填充列表然后将其分配给绑定到datagrid的列表,则需要为此实现INotifyPropertyChanged。
{% extends "base.html" %}
{% block comment %}
{% autoescape true %}
<form method="post">
<div>
<input type="submit" name="button" value="{{button}}">
<input type="hidden" name="run" value="{{run}}">
</div>
<!-- <div>macAddress: <input type="text" name="macAddress"><br>
<input type="submit" value="Submit">
</div> -->
</form>
{% endautoescape %}
{% endblock %}
当您执行上述绑定时,<DataGrid x:Name="DataNahrungsmittel" ItemsSource="{Binding Path=NahrungsmittelKategorie}"></DataGrid>
为空。
并在以下行中更新NahrungsmittelKategorie
,但它不会通知datagrid绑定集合已更改。
NahrungsmittelKategorie
您需要实现INotifyPropertyChanged并在分配时通知属性(在setter中)
NahrungsmittelKategorie = ListNahrungsmittel;
private static ObservableCollection<NahrungsmittelKategorie> nahrungsmittelKategorie = new ObservableCollection<NahrungsmittelKategorie>();
public static ObservableCollection<NahrungsmittelKategorie> NahrungsmittelKategorie
{
get { return nahrungsmittelKategorie; }
set { nahrungsmittelKategorie = value; NotifyPropertyChanged("NahrungsmittelKategorie")};
}
将是您实施NotifyPropertyChanged
时要编写的方法。
答案 1 :(得分:0)
您是否设置了视图的DataContext?
您的Xaml应该如下:
<YourRootElement x:Name="yourName">
...
</YourRootElement>
你的Xaml.Cs构造函数应该是这样的:
public YourClassName()
{
InitialiseComponent();
yourName.dataContext = this;
}