我有下一个结构。一个有两个孩子的容器。我希望当我点击child1元素时,child2刷新数据。
VMLocatos.cs
static VMLocator()
{
var container = new UnityContainer();
container.RegisterType<IService, Service>();
container.RegisterType<ContainerVM>();
container.RegisterType<Child1VM>();
container.RegisterType<Child2VM>();
}
....
ContainerVM.cs
... Bindind in ContentControl the two user controls Child1V and child2V ..
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();
}
Child2VM.cs
public Child2VM(IService service)
{
Elements= servce.GetElements();
}
public void refresh()
{
...
}
IService.cs
List<Elemnents> GetElements();
我尝试在Iservice中创建一个属性,如:
int Update{ get; set; }
并在Service.cs中
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;
}
}
我不知道是否使用了最好的方法,因为我没有找到关于使用来自其他viewmodel的unity和fire事件注入的文档。 感谢您的时间