绑定到另一个视图模型

我试图将可见性属性绑定到我在viewmodel( MainViewModel )中创建的函数,但我收到此错误:

mscorlib.dll System.Windows.Data中出现类型’System.IO.FileNotFoundException’的第一次机会exception错误:BindingExpression路径错误:’Locator”System.String’上找不到’Main’属性(HashCode = -191326816) 。 BindingExpression:Path =’Main.TilesHomeViewVisible’DataItem =’Locator’(HashCode = -191326816); target元素是’myApp.Views.TilesHomeView’(Name =’myTilesHomeView’); target属性是’Visibility’(类型’System.Windows.Visibility’)..

根据我从错误中理解,它正在TilesHomeViewVisible寻找TilesHomeViewVisible函数,而它实际上是在MainViewModel 。 在绑定表达式中,我如何定位MainViewModel呢?

编辑:我有一个’ViewModelLocator’集成。

这是我的ViewModelLocator:

  ... public ViewModelLocator() { ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default); SimpleIoc.Default.Register(); SimpleIoc.Default.Register(); } public MainViewModel Main { get { return ServiceLocator.Current.GetInstance(); } } public TilesHomeViewModel TilesVM { get { return ServiceLocator.Current.GetInstance(); } } ... 

我的App.xaml:

                    

在我的MainPage.xaml和链接到定位器的地方,我有:

     ...  ...    

MainViewModel.cs

 public class MainViewModel : ViewModelBase { public MainViewModel() { this.Items = new ObservableCollection(); } Visibility _tilesHomeViewVisible = System.Windows.Visibility.Collapsed; public Visibility TilesHomeViewVisible { get { return System.Windows.Visibility.Collapsed; } set { _tilesHomeViewVisible = value; RaisePropertyChanged("TilesHomeViewVisible"); } } public void TilesHomeViewClose() { TilesHomeViewVisible = System.Windows.Visibility.Collapsed; } public bool IsDataLoaded { get; private set; } ///  /// Creates and adds a few ItemViewModel objects into the Items collection. ///  public void LoadData() {...} } 

TilesHomeView.xaml将其数据上下文定义为:

     

HomeViewModel.cs没有任何function,并且如此呈现

 namespace myApp { public class TilesHomeViewModel : ViewModelBase { public TilesHomeViewModel() { } } } 

我希望这个尽可能详细。 我真的希望找到一个解决这个错误的方法,它已经困扰了我好几天了。

谢谢

问题是您可能正在将TilesHomeViewModel设置为TilesHomeView用户控件的根目录上的DataContext(这意味着TilesHomeView元素的DataContext也是TilesHomeView)。
以下是此问题的两种可能解决方案:

设置可见性时明确设置源:

  

(使用定位器上的适当值更新)

– 第二个解决方案是移动到您在UserControl中将DataContext设置为TilesHomeViewModel的位置:将DataContext设置为User控件的LayoutRoot网格而不是根。