C# 视图模型MVVM和x2B之间的触发事件;代码注入(Unity)。超宽带
我有下一个结构。有两个孩子的容器。我希望当我在child1元素中单击时,child2刷新数据 VMLocatos.csC# 视图模型MVVM和x2B之间的触发事件;代码注入(Unity)。超宽带,c#,mvvm,uwp,unity-container,code-injection,C#,Mvvm,Uwp,Unity Container,Code Injection,我有下一个结构。有两个孩子的容器。我希望当我在child1元素中单击时,child2刷新数据 VMLocatos.cs static VMLocator() { var container = new UnityContainer(); container.RegisterType<IService, Service>(); container.RegisterType<ContainerVM>();
static VMLocator()
{
var container = new UnityContainer();
container.RegisterType<IService, Service>();
container.RegisterType<ContainerVM>();
container.RegisterType<Child1VM>();
container.RegisterType<Child2VM>();
}
....
Child1VM
... 此vm有一个列表视图可供选择
public Child1VM(IService service)
{
...
MenuItemClick = new DelegateCommands<ItemClickEventArgs>
(OnItemClicked,()=>true);
}
private void OnItemClicked(ItemClickEventArgs args)
{
MenuItem a =(MenuItem) args.ClickedItem ;
Call To Child2VM.Refresh();
}
IService.cs
List<Elemnents> GetElements();
public int Update
{
get
{ return _uptate; }
set
{
_update= value;
RaisePropertyChanged();
}
}
public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
{
var Handler = PropertyChanged;
// Handler is always null
if (Handler != null)
Handler(this, new PropertyChangedEventArgs(propertyName));
}
和在役.cs
List<Elemnents> GetElements();
public int Update
{
get
{ return _uptate; }
set
{
_update= value;
RaisePropertyChanged();
}
}
public void RaisePropertyChanged([CallerMemberName]string propertyName = "")
{
var Handler = PropertyChanged;
// Handler is always null
if (Handler != null)
Handler(this, new PropertyChangedEventArgs(propertyName));
}
并从ChildVM1更新该变量
service.Update = 1;
并从ChildVM2尝试订阅属性更改
Update = service.Update;
public int Update
{
get
{
No fired when change the variable in service
return _update;
}
set
{
No fired when change the variable in service
update = value;
}
}
我不知道a是否使用最佳方法,因为我没有从其他viewmodel中找到关于unity注入和fire事件的文档。
感谢您的时间您可以在Unity上使用Prism,它有类似EventAggregator的功能,可以做到这一点。您还可以使用RX,以便VM2订阅服务中的观察者,而VM1会导致调用服务,刷新基础数据源并将其发布回观察者,然后VM2再次拾取它。解决这个问题的方法可能比你目前的方法更好。非常感谢。使用Prism和EventAggregator可以很好地工作。您可以在Unity上使用Prism,Unity具有类似EventAggregator的功能,可以做到这一点。您还可以使用RX,以便VM2订阅服务中的观察者,而VM1会导致调用服务,刷新基础数据源并将其发布回观察者,然后VM2再次拾取它。解决这个问题的方法可能比你目前的方法更好。非常感谢。使用Prism和EventAggregator可以很好地工作。
Update = service.Update;
public int Update
{
get
{
No fired when change the variable in service
return _update;
}
set
{
No fired when change the variable in service
update = value;
}
}