C# WPF MVVM-使用委托访问其他ViewModel的属性
我有一个C# WPF MVVM-使用委托访问其他ViewModel的属性,c#,wpf,mvvm,C#,Wpf,Mvvm,我有一个MainViewModel,它以PersonViewModel和一个HouseViewModel作为属性HouseViewModel具有属性GetRooms。从PersonViewModel访问此属性的最佳方式是什么 我现在的解决方案是将MainViewModel的实例传递到PersonViewModel,然后我可以调用MainViewModel.HouseViewModel.GetRooms。然而,这似乎有点浪费 我很乐意以委托的形式传递函数,但我似乎不能用属性来传递函数。我搜索了一个
MainViewModel
,它以PersonViewModel
和一个HouseViewModel
作为属性HouseViewModel
具有属性GetRooms
。从PersonViewModel
访问此属性的最佳方式是什么
我现在的解决方案是将MainViewModel
的实例传递到PersonViewModel
,然后我可以调用MainViewModel.HouseViewModel.GetRooms
。然而,这似乎有点浪费
我很乐意以委托的形式传递函数,但我似乎不能用属性来传递函数。我搜索了一个这样的例子,只找到了过于复杂的技术。我假设一定有一个简单的方法来做这件事,因为这似乎是一个常见的问题。谁能举出一个有力的例子
或者还有其他我没有考虑过的替代方法吗?如果一个方法必须在两个viewmodel之间共享,那么它应该在基本viewmodel或服务中定义。最好的方法是一个公共服务类应该包含所有的公共方法,比如GetRooms、CheckIn、CheckOut等,并且这个服务应该提供给每个使用的viewmodel
一个人得到一个房间不是更合乎逻辑吗?房子没有房间?房子里有一个人可以“得到”的房间吗?那么为什么房屋对象有一个获得房间的方法呢?当然,Person对象应该具有该属性。这是一个虚构的示例。请忽略人/房子/房间之间的任何感知逻辑。啊,好吧,然后看看
,然而,这似乎有点浪费。?
这是什么意思?我觉得可以将HouseViewModel作为参数传递给PersonViewModel构造,而不是MainViewModel。如果这样做是有意义的,那就去做,不要过度优化,否则会导致混乱。有时可读性更重要。这很公平,但你的底线在哪里?如果我需要通过几个类的实例传递MainViewModel,该怎么办?
public class HomeViewModel
{
public HomeViewModel(IRoomService roomservice)
{
}
}
public class PersonViewModel
{
public PersonViewModel(IRoomService roomservice)
{
}
}