我使用SQLite在我的應用程序存儲一些Message
對象。我在「視圖1」中顯示Message
項目的列表。當我在編輯視圖「視圖2」中更改屬性時,我希望屬性也在列表中更改。C#SQLite的INotifyPropertyChanged的實施
類
Message.cs
class Message : INotifyPropertyChanged
{
private uint _id;
public uint Id
{
get
{
return _id;
}
set
{
// Trigger INotifyPropertyChanged
Set("Id", ref _id, value);
}
}
private string _content;
public string Content
{
get
{
return _content;
}
set
{
// Trigger INotifyPropertyChanged
Set("Content", ref _content, value);
}
}
...
}
MessageViewModel.cs
class MessageViewModel : INotifyPropertyChanged
{
private Message message;
...
private string _content;
public string Content
{
get
{
return message.Content;
}
set
{
// Set value
message.Content = value;
// Trigger INotifyPropertyChanged
RaisePropertyChanged();
}
}
...
}
查看1
View1.xaml
DataContext的是View1ViewModel
View1ViewModel.cs
private List<MessageViewModel> _messages;
public List<MessageViewModel> Messages
{
get
{
return _messages;
}
set
{
// Trigger INotifyPropertyChanged
Set("Messages", ref _messages, value);
}
}
...
private async void loadMessages()
{
// Get the messages from SQLite database
var messages = await newMessages();
Messages = new MessageViewModelCollection(messages);
}
視圖2
個View2ViewModel.cs
private MessageViewModel _message;
public MessageViewModel Message
{
get
{
return _message;
}
set
{
// Trigger INotifyPropertyChanged
Set("Message", ref _message, value);
}
}
...
private async void loadMessage()
{
// Get the message from SQLite database by Id
var message = await newMessage(messageId);
Message = new MessageViewModel(message);
}
功能newMessages
和newMessage(uint messageId)
返回數據庫new
Message
對象。
我通常使用INotifyPropertyChanged
實現,但這不起作用。我查詢數據庫2次,一次查看列表(查看1),一次查詢編輯頁面(查看2)。 SQLite返回Message
對象的兩個不同副本,因此INotifyPropertyChanged
meganism將不起作用(僅在當前頁面中,而不在backstack中)。
我可以通過重新使用列表中的Message
項來解決此問題,但我不能始終在所有視圖中都這樣做。
有沒有辦法讓INotifyPropertyChanged
在這種情況下工作?或者我需要一種不同的方法來更新值?
我已經在使用'MessageViewModel'來綁定到WPF視圖。虛擬機仍然存在問題。 「消息」對象發生變化,但「查看1」和「查看2」的ViewModel正在「查看」兩個不同的「消息」對象。通常兩個視圖模型將「觀察」相同的「消息」對象。 – Michael
你是否直接將'Message'對象綁定到列表中?換句話說,MessageViewModel是否有兩個與WPF視圖綁定的Message對象列表?如果是這樣,你需要解耦,否則你會看到不希望的'INotifyPropertyChanged'被調用的挑戰。 – code4life
對於「視圖1」,我使用了「List」。該視圖將綁定到「MessageViewModel.PropertyA」。 「視圖2」只有一個'MessageViewModel',這個'MessageViewModel'更新'Message'對象,它只在「視圖2」中觸發'INotifyPropertyChanged'。 –
Michael