私は、Windows Phone での MVVM 統合の初心者です。2 つの異なるビュー ( TilesView[xaml+cs] と MainPage[xaml+cs] ) と 2 つの ViewModel (MainViewModel.cs と TilesViewModel.cs) があり、次に MainPage.xaml があります。MainPage のホーム ボタンが押されたときに、TilesView を MainPage に出力したいと考えています。TilesView には、私のタイルを持つ Canvas が含まれています。TilesView を含めるには、MainView のどのコントロールを使用すればよいですか? その 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 には、gridrows が定義されたグリッドがある場所があります。Gridrow=0 は TilesView 用に予約されているため、TilesView が MainPage にポップアップ/ロードされると、その gridrow セクションが埋められます。グリッド行スペースを予約することが解決策ではない、または必要ない場合は、他のヒント/解決策を教えていただければ幸いです。コードビハインドのように呼び出されるたびに TilesView を再配置する別の方法があるかもしれません。
以前に尋ねた質問へのヒント、コード、またはチュートリアルのリンクは役に立ちます。ありがとう