【问题标题】:Interaction with the collection does not use the set accessor [duplicate]与集合的交互不使用集合访问器[重复]
【发布时间】:2021-05-06 12:57:08
【问题描述】:
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
    }

需要有一个 Message List.Add 通过 Message List 属性进行交互,但由于某种原因它绕过了它。我也尝试通过赋值访问访问器,但这也绕过了属性。我正在寻找有关此的信息,但没有找到合适的信息,也许我看起来很糟糕?

【问题讨论】:

  • 向列表添加内容肯定不会设置该列表。如果您为该属性分配一个新列表,则将调用 setter。
  • 使用 ObservableCollection 代替 List
  • 感谢您的提示,我会尝试使用它。

标签: c# .net wpf


【解决方案1】:

正如 Dzianis Karpuk 所建议的,需要使用 ObservableCollection 而不是 List,一切正常。

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2015-09-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多