代码之家  ›  专栏  ›  技术社区  ›  Mark Denom

为什么在将数据从我的服务添加到viewmodel时我的视图没有更新?

  •  0
  • Mark Denom  · 技术社区  · 6 年前

    因此,我刚刚创建了一个新项目,并尝试向ViewModel中的集合添加一些数据,但是当我向其中添加数据时,它确实会添加数据,但不会更新UI。

    这是我设置DataContext的地方,也是我试图向集合添加一些内容的地方

    ProxyService ps;
    
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new BaseViewModel();
    
        ps = new ProxyService();
        ps.AcceptConnection();
    }
    

    请记住,它确实会将它添加到集合中。我调试它时没有错误,而且它在集合中是正确的。 代理服务器.cs

    public class ProxyService : MessageViewModel
    {
        public void AcceptConnection()
        {
            Messages.Add(new MessageModel { Message = "Awaiting connection..." });
    

    这是BaseViewModel

    public class BaseViewModel
    {
        public MessageViewModel MessageViewModel { get; set; } = new MessageViewModel();
    }
    

    public class MessageViewModel : ObservableObject
    {
        private ObservableCollection<MessageModel> _messages;
    
        public ObservableCollection<MessageModel> Messages
        {
            get { return _messages; }
            set
            {
                _messages = value;
                OnPropertyChanged();
            }
        }
    
    
        public MessageViewModel()
        {
            Messages = new ObservableCollection<MessageModel>();
        }
    }
    

    这里是ScrolLViewer的XAML,我正在向其中添加数据

    <ScrollViewer  Height="380"
                               Margin="10"
                               >
        <StackPanel>
            <ItemsControl ItemsSource="{Binding MessageViewModel.Messages}">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <TextBlock FontFamily="Consolas" 
                                               Foreground="#61d73d"
                                               Text="{Binding Message}"/>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>
            </ItemsControl>
        </StackPanel>
    
    </ScrollViewer>
    

    我面临的问题是,当它添加一些东西时,它不会更新UI 然而!如果我在构造函数中添加一些东西,它就可以正常工作。作为一个例子,它工作得很好,它在视图中显示得很好

    public MessageViewModel()
    {
        Messages = new ObservableCollection<MessageModel>();
        Messages.Add(new MessageModel { Message = "Hello World!" });
    }
    

    2 回复  |  直到 6 年前
        1
  •  1
  •   Peregrine    6 年前

    值得注意的三点。

    1. 将窗口的DataContext设置为BaseViewModel的一个实例,然后创建ProxyServiceClass的单独实例。

    2. 你的领带 ItemsControl . ItemsSource 应该只绑定到DataContext的属性,在本例中是消息。

        2
  •  1
  •   mm8    6 年前

    BaseViewModel ProxyService 另一个。你不能指望 MessageModel 添加到后者的对象会影响前者,反之亦然。试着设置 DataContext :

    public MainWindow()
    {
        InitializeComponent();
        ps = new ProxyService();
        ps.AcceptConnection();
        DataContext = new BaseViewModel { MessageViewModel = ps };
    }