ViewModel でインスタンス化した UserControl に ContentControl の Content をバインドしようとしています。インスタンス化せずに、UserControls/Views の同じインスタンスを使用して ContentControl のコンテンツを頻繁に変更できるようにする必要があるため、ViewModel へのバインディングでメソッドを使用してから、UserControl を ViewModel の DataTemplate にすることはできません。再バインドするたびにビュー。
ただし、UserControl プロパティを UserControl インスタンスに設定し、ビューがレンダリング/データ バインドされると、次のようになります。新しい親 Visual にアタッチする前に、指定された子を現在の親 Visual から切断する必要があります。以前にこの UserControl をどこにも追加したことがありませんが、以前にこのインスタンスを作成してメモリに保持しました。
私がやっていることを達成するためのより良い方法はありますか?
ビューモデルで
public class MyViewModel : INotifyPropertyChanged
{
//...
private void LoadApps()
{
var instances = new List<UserControl>
{
new Instance1View(),
new Instance2View(),
new Instance3View(),
};
SwitchInstances(instances);
}
private void SwitchInstances(List<UserControl> instances)
{
CenterApp = instances[0];
}
//...
private UserControl _centerApp;
public UserControl CenterApp
{
get { return _centerApp; }
set
{
if (_centerApp == value)
{
return;
}
_centerApp = value;
OnPropertyChanged("CenterApp");
}
}
//...
}
View.xaml で
<ContentControl Content="{Binding CenterApp}"></ContentControl>