我有一張發票表,我正在加載這樣的資料(并且作業正常):
private ObservableCollection<InvoiceData> _listAchats;
public ObservableCollection<InvoiceData> ListAchats
{
get { return _listAchats; }
set
{
_listAchats = value;
NotifyPropertyChanged("ListAchats");
}
}
視圖模型:
_listAchats = new ObservableCollection<InvoiceData>();
ListAchats = GetAchatList();
public ObservableCollection<InvoiceData> GetAchatList()
{
//Count = 0;
ObservableCollection<InvoiceData> ClientsList = new ObservableCollection<InvoiceData>();
using (SQLiteConnection conn =
new SQLiteConnection(ConfigurationManager.ConnectionStrings["StringConnexion"].ConnectionString))
{
conn.Open();
SQLiteCommand cmdNotes =
new SQLiteCommand("SELECT * FROM Invoice", conn);
// cmdNotes.Parameters.AddWithValue("@MAT_EMP", Matricule);
using (SQLiteDataReader reader = cmdNotes.ExecuteReader())
{
var ordinals = new
{
InvoiceId = reader.GetOrdinal("invoice_id"),
SellerName = reader.GetOrdinal("seller_name"),
PurchaseDate = reader.GetOrdinal("purchase_date")
};
while (reader.Read())
{
var temp = new TableInvoice();
temp.IdInvoice = reader.GetInt32(ordinals.InvoiceId);
temp.SellerName = reader.GetString(ordinals.SellerName);
temp.PurchaseDate = reader.GetDateTime(ordinals.PurchaseDate).ToShortDateString();
// temp.JoinDateString = RelativeTime.ConvertDate(reader.GetDateTime(ordinals.JoinDate));
ClientsList.Add(temp.ClientsList());
}
}
}
return ClientsList;
}
現在,我想做的是,每當我填寫某個表單(將其插入資料庫表中)時,就是更新和重繪 這個 ObservableCollection。我有一個這樣做的按鈕:
private void Refresh()
{
Console.WriteLine("This is triggered");
ListAchats.Clear();
ListAchats = GetAchatList();
Console.WriteLine(ListAchats.Count);
}
DataGrid,變空......但由于某種原因永遠不會重新加載。有什么想法可能是什么原因?這是 XAML:
<DataGrid Margin="0 16 0 0"
Name="Agrid"
Background="Transparent"
ScrollViewer.CanContentScroll="True"
ScrollViewer.VerticalScrollBarVisibility="Auto"
AutoGenerateColumns="False"
Focusable="False"
MaxHeight="400"
ScrollViewer.HorizontalScrollBarVisibility="Auto"
CanUserSortColumns="True"
SelectedItem="{Binding SelectedAchat}"
ItemsSource="{Binding ListAchats,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
CanUserAddRows="False"
IsReadOnly="True" SelectionMode="Single" SelectionUnit="FullRow">
<DataGrid.InputBindings>
<KeyBinding Key="Delete" Command="{Binding DeleteButtonCommand}"/>
</DataGrid.InputBindings>
<DataGrid.Columns>
<DataGridTemplateColumn SortMemberPath="IdInvoice" Header="N° Achat">
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center"
Text="{Binding Path=IdInvoice, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn SortMemberPath="SellerName" Header="Nom de vendeur" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center"
Text="{Binding Path=SellerName, Mode=TwoWay}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
<DataGridTemplateColumn SortMemberPath="PurchaseDate" Header="Date d'achat" >
<DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock VerticalAlignment="Center"
Text="{Binding Path=PurchaseDate, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
</DataTemplate>
</DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>
就像我之前說的,ObservableCollection 在我第一次運行應用程式時起作用,只是在我重繪 它時不起作用。
uj5u.com熱心網友回復:
根據您的解釋,我敢假設您的更改通知有問題。
試試這個實作:
// "ReadOnly" propery
public ObservableCollection<InvoiceData> ListAchats {get;} = new();
public IEnumerable<InvoiceData> GetAchatList()
{
List<InvoiceData> clientsList = new List<InvoiceData>();
// Some Code
// When returning a list, just in case,
// we protect the original list from changes.
return clientsList.Select(cl => cl);
}
private void Refresh()
{
Console.WriteLine("This is triggered");
ListAchats.Clear();
foreach(var cl in GetAchatList())
ListAchats.Add(cl);
Console.WriteLine(ListAchats.Count);
}
uj5u.com熱心網友回復:
顯然,我忘了INotifyPropertyChanged向我的 ViewModel 添加介面。這就是導致問題的原因。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516394.html
標籤:C#wpf
上一篇:WebView2未初始化
下一篇:如何為WPF日歷的日期背景著色?
