C# 与集合的交互不使用集合访问器 公共类MainWindowVM:ViewModel { #地区公众成员 公共用户本地用户 { get=>Settings.LocalUser; 设置 { Settings.LocalUser=value; OnPropertyChanged(); } } 公共网站用户选择用户 { get=>selectedUser; 设置 { selectedUser=值; OnPropertyChanged(); } } 公共字符串输入消息 { get=>inputMessage; 设置 { inputMessage=值; OnPropertyChanged(); } } 公共列表消息列表 { 得到 { 如果(selectedUser==null) 返回null; 返回SelectedUser.MessageThread; } 设置 { 选择eduser.MessageThread=value; OnPropertyChanged(); } } 公共RelayCommand sendMessage命令 { 得到 { 返回sendMessageCommand?? (sendMessageCommand=new RelayCommand(obj=> { SendMessage(); })); } } #端区 #区域公共方法 公共MainWindowVM(窗口) { 窗口主窗口=窗口; MawLib.WindowResizer WindowResizer=新的MawLib.WindowResizer(窗口); Settings.InitializeInstance(); SelUser=SelectUser; UserListRaw=新列表 { 新Web用户(新用户ID(“SomeTestUser23”), 新WebUser(新用户ID(“NoName”)) }; WebClient.Connect(); } public void SelectUser(WebUser用户) { SelectedUser=用户; MessageList=SelectedUser.MessageThread; } #端区 #区域私人成员 私人网络用户选择用户; 私有字符串输入消息; #端区 #区域私有方法 私有void SendMessage() { if(InputMessage!=“”&&InputMessage!=null) { 添加(新消息(InputMessage、LocalUser、SelectedUser)); WebClient.SendRequest(新消息(InputMessage、Settings.LocalUser、selectedUser)、Request.RequestType.Message); InputMessage=“”; } } #端区 }
需要有一个消息列表。添加通过消息列表属性进行交互,但由于某些原因它会绕过它。我还试图通过赋值访问访问器,但这也绕过了属性。我一直在寻找关于这方面的信息,但我没有找到任何合适的信息,也许我看起来很糟糕?正如Dzianis Karpuk所建议的,需要使用ObservableCollection而不是List,一切都正常工作。向列表中添加某些内容肯定不会设置该列表。如果您将新列表分配给该属性,则会调用setter。请使用ObservableCollection而不是list多谢提示,我将尝试使用它。C# 与集合的交互不使用集合访问器 公共类MainWindowVM:ViewModel { #地区公众成员 公共用户本地用户 { get=>Settings.LocalUser; 设置 { Settings.LocalUser=value; OnPropertyChanged(); } } 公共网站用户选择用户 { get=>selectedUser; 设置 { selectedUser=值; OnPropertyChanged(); } } 公共字符串输入消息 { get=>inputMessage; 设置 { inputMessage=值; OnPropertyChanged(); } } 公共列表消息列表 { 得到 { 如果(selectedUser==null) 返回null; 返回SelectedUser.MessageThread; } 设置 { 选择eduser.MessageThread=value; OnPropertyChanged(); } } 公共RelayCommand sendMessage命令 { 得到 { 返回sendMessageCommand?? (sendMessageCommand=new RelayCommand(obj=> { SendMessage(); })); } } #端区 #区域公共方法 公共MainWindowVM(窗口) { 窗口主窗口=窗口; MawLib.WindowResizer WindowResizer=新的MawLib.WindowResizer(窗口); Settings.InitializeInstance(); SelUser=SelectUser; UserListRaw=新列表 { 新Web用户(新用户ID(“SomeTestUser23”), 新WebUser(新用户ID(“NoName”)) }; WebClient.Connect(); } public void SelectUser(WebUser用户) { SelectedUser=用户; MessageList=SelectedUser.MessageThread; } #端区 #区域私人成员 私人网络用户选择用户; 私有字符串输入消息; #端区 #区域私有方法 私有void SendMessage() { if(InputMessage!=“”&&InputMessage!=null) { 添加(新消息(InputMessage、LocalUser、SelectedUser)); WebClient.SendRequest(新消息(InputMessage、Settings.LocalUser、selectedUser)、Request.RequestType.Message); InputMessage=“”; } } #端区 },c#,.net,wpf,C#,.net,Wpf,需要有一个消息列表。添加通过消息列表属性进行交互,但由于某些原因它会绕过它。我还试图通过赋值访问访问器,但这也绕过了属性。我一直在寻找关于这方面的信息,但我没有找到任何合适的信息,也许我看起来很糟糕?正如Dzianis Karpuk所建议的,需要使用ObservableCollection而不是List,一切都正常工作。向列表中添加某些内容肯定不会设置该列表。如果您将新列表分配给该属性,则会调用setter。请使用ObservableCollection而不是list多谢提示,我将尝试使用它。
public class MainWindowVM : ViewModel
{
#region public members
public User LocalUser
{
get => Settings.LocalUser;
set
{
Settings.LocalUser = value;
OnPropertyChanged();
}
}
public WebUser SelectedUser
{
get => selectedUser;
set
{
selectedUser = value;
OnPropertyChanged();
}
}
public string InputMessage
{
get => inputMessage;
set
{
inputMessage = value;
OnPropertyChanged();
}
}
public List<Message> MessageList
{
get
{
if (selectedUser == null)
return null;
return SelectedUser.MessageThread;
}
set
{
SelectedUser.MessageThread = value;
OnPropertyChanged();
}
}
public RelayCommand SendMessageCommand
{
get
{
return sendMessageCommand ??
(sendMessageCommand = new RelayCommand(obj =>
{
SendMessage();
}));
}
}
#endregion
#region public methods
public MainWindowVM(Window window)
{
Window MainWindow = window;
MawLib.WindowResizer windowResizer = new MawLib.WindowResizer(window);
Settings.InitializeInstance();
SelUser = SelectUser;
UserListRaw = new List<WebUser>
{
new WebUser(new UserId("SomeTestUser23")),
new WebUser(new UserId("NoName"))
};
WebClient.Connect();
}
public void SelectUser(WebUser user)
{
SelectedUser = user;
MessageList = SelectedUser.MessageThread;
}
#endregion
#region private members
private WebUser selectedUser;
private string inputMessage;
#endregion
#region private methods
private void SendMessage()
{
if (InputMessage != "" && InputMessage != null)
{
MessageList.Add(new Message(InputMessage, LocalUser, SelectedUser));
WebClient.SendRequest(new Message(InputMessage, Settings.LocalUser, selectedUser), Request.RequestType.Message);
InputMessage = "";
}
}
#endregion
}