我是 Windows Phone 上 MVVM 集成的初学者。我有 2 个不同的视图( TilesView[xaml+cs] 和 MainPage[xaml+cs] )和 2 个 ViewModel(MainViewModel.cs 和 TilesViewModel.cs),然后是我的 MainPage.xaml 。当按下 MainPage 上的主页按钮时,我想将 TilesView 输出到我的 MainPage 中。TilesView 包含一个包含我的瓷砖的 Canvas。我应该在 MainView 中使用什么控件才能包含 TilesView?我希望在按下 MainPage 中的 HomeButton 后将视图输出到 MainPage 时调用一个名为 LaodTiles 的函数。我如何定义该功能以及在哪里?
我主要集成了 MVVM 结构,以便能够更好地管理我的资源并使 MainPage 尽可能轻,以便通过控制应该首先启动哪些设计组件以及应该延迟哪些设计组件来在启动我的应用程序时加载更快。Tiles 视图是我从 MainPage 中删除的,稍后加载它,关闭时它会释放一些资源。
所以我设法以这种方式在 VMLocator 中进行 MVVM 接线(如果这不是继续的方法,请纠正我):
...
public ViewModelLocator()
{
ServiceLocator.SetLocatorProvider(() => SimpleIoc.Default);
SimpleIoc.Default.Register<MainViewModel>();
SimpleIoc.Default.Register<TilesHomeViewModel>();
}
public MainViewModel Main
{
get
{
return ServiceLocator.Current.GetInstance<MainViewModel>();
}
}
public TilesHomeViewModel TilesVM
{
get
{
return ServiceLocator.Current.GetInstance<TilesHomeViewModel>();
}
}
...
我的 TilesView 具有以下一般结构:
<phone:PhoneApplicationPage x:Class="myAppName.Views.TilesHomeView" ... >
<Grid x:Name="HomeGrid" ...>
<Canvas x:Name="TilesCanvas" >
...
在我的 TilesHomeViewModel 中,我将它设置为 INotifyPropertyChanged(同样,我是 MVVM 的初学者,所以我对如何解决这个问题的理解可能不正确)。这是它的定义方式:
public class TilesHomeViewModel : INotifyPropertyChanged
{
private string loadHomeContent;
public string LoadHomeContent
{
get
{
return loadHomeContent;
}
set
{
loadHomeContent = value;
NotifyPropertyChanged("LoadHomeContent");
}
}
public TilesHomeViewModel()
{
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
PropertyChangedEventHandler handler = PropertyChanged;
if (null != handler)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
}
我的 MainPage.xaml 有一个定义了网格的网格。Gridrow=0 已为 TilesView 保留,因此当 TilesView 弹出/加载到 MainPage 时,它将填充该 gridrow 部分。如果保留网格空间不是解决方案或没有必要,我会很高兴听到其他一些提示/解决方案。也许还有另一种方法可以让 TilesView 在被调用时重新定位,就像在代码隐藏中一样。
任何指向之前提出的问题的提示、代码或教程链接都会有所帮助。谢谢