我正在尝试将 ContentControl 的内容绑定到我在 ViewModel 中实例化的 UserControl。我不能使用绑定到 ViewModel 的方法,然后让 UserControl 成为 ViewModel 的 DataTemplate,因为我需要 ContentControl 的内容能够经常更改,使用相同的 UserControls/Views 实例,而不是实例化每次我重新绑定的意见。
但是,当将 UserControl-property 设置为 UserControl-instance 时,然后当视图被渲染/数据绑定时,我得到:在附加到新的父 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>