gpt4 book ai didi

c# - 多个 View 模型共享一个带有通知的服务

转载 作者:行者123 更新时间:2023-12-03 10:53:25 25 4
gpt4 key购买 nike

问题:我有两个与列表共享服务的 View 模型。我的问题是如何设置通知,以便两个 View 模型都知道此列表何时更改。下面的描述和我所在的代码。

我找到了这个例子 HERE这看起来适合我正在尝试做的事情,但我有一个关于如何在我的 View 模型中通知我的服务更改的问题。我将添加一些我模拟的代码,看看我是否走在正确的轨道上。我正在使用 WPF/MVVM Light。

第一部分是具有接口(interface)的服务,该接口(interface)将包含数据列表,在此示例中,我使用的是字符串列表。我希望两个 View 模型中的属性都可以访问此数据列表,并在更改时收到通知。我认为让我感到困惑的是 IOC 接口(interface)进入我的 View 模型。我越来越理解为什么这很好,但我仍然在思考它,我不确定如何在服务中更改列表时设置通知。如果我的服务没有被注入(inject),我可能已经设置了一个事件或属性,我的 viewmodel 属性可以访问 get/set,但是注入(inject)我的服务不会暴露我的公共(public)字段,只是方法。这对我来说是新的,所以我很可能没有正确理解这一点或遗漏了一些东西。

我在我的服务中使用了一个 List 而不是 ObservableCollection 基于一些阅读我已经警告不要在此处使用 ObservableCollection。谢谢你的帮助。

public class MyService : IMyService
{
private List<string> myList = new List<string>();

public List<string> getMyList()
{
return this.myList;
}
public void setMyList(List<string> value)
{
this.myList = value;
}
public void addValue(string value)
{
this.myList.Add(value);
}
public void insertValue(int index, string value)
{
this.myList.Insert(index, value);
}
}

public class MyViewModelOne : ViewModelBase
{
private readonly IMyService myService;

public MyViewModelOne(IMyService myService)
{
this.myService = myService;
}

public List<string> MyProperty // control item source will bind to this
{
get
{
return this.myService.getSource();
}
}
public void setSomeValue(value)
{
this.myService.addValue(value);
}
}

public class MyViewModelTwo : ViewModelBase
{
private readonly IMyService myService;

public MyViewModelTwo(IMyService myService)
{
this.myService = myService;
}

public List<string> MyProperty // control item source will bind to this
{
get
{
return this.myService.getSource();
}
}
public void setSomeValue(value)
{
this.myService.addValue(value);
}
}

最佳答案

根据我对您的问题的理解,您本质上需要的是您的服务级别的 INotifyPropertyChanged 实现和列表我的列表是从服务注入(inject)的 ObservableCollection。

现在,如果有通知更改,它将直接在服务上,因此不需要明确的处理。

您的绑定(bind)可能类似于 "{Binding MyService.MyProperty}"

关于c# - 多个 View 模型共享一个带有通知的服务,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/29258494/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com