将ContentControl绑定到UserControl,并复用同一个实例。我不能使用绑定到ViewModel的方法,然后让UserControl成为ViewModel的DataTemplate,因为我需要ContentControl的内容能够使用UserControls/Views的相同实例频繁更改,而不是实例化每个视图是时候反弹了。但是,当将UserControl属性设置为UserControl实例,然后在呈现视图/数据绑定时,我得到:在连接到新的父Visual之前,必须断开指定的子视图与当前父Visual的连接。尽管我之前没有在任何地方添加这个UserControl,但我只是早些时候创建了这个实例并将其保存在内存中。有没有更好的方法来实现我的目标?在ViewModel中publicclassMyViewModel:INotifyPropertyChanged{//...privatevoidLoadApps(){varinstances=newList{newInstance1View(),newInstance2View(),newInstance3View(),};开关实例(实例);}privatevoidSwitchInstances(Listinstances){CenterApp=instances[0];}//...私人用户控件_centerApp;publicUserControlCenterApp{get{return_centerApp;}set{if(_centerApp==value){返回;}_centerApp=价值;OnPropertyChanged("中心应用");}}//...}在View.xaml中评论太长。基于@Kent在评论中所说的内容,MVVM的全部要点是将视图模型与视图相关的东西(控件)断开连接,这将阻止GUI应用程序进行测试。因此,您拥有UserControl/Button/任何与图形视图相关的项目这一事实否定了MVVM的整个原则。如果使用MVVM符合其标准,那么您应该重新解决您的问题。使用MVVM,您通常有1个视图1个ViewModel,其中View了解其ViewModel(通常通过DataContext)。不应编程反转。您试图将控制视图的逻辑放在视图模型中以允许测试逻辑(命令和INPC属性)......等等。它在视图模型的范围内非常具体,没有视图相关的东西,例如视图模型中甚至没有像Visibility这样的属性。您通常持有一个bool,然后在视图中使用转换器将其切换为Visibility对象。多读一点MVVM肯定会对你有所帮助,现在解决当前的问题:遵循MVVM结构,你将拥有像ViewModels这样的实例://ViewModelBase是所有实例ViewModels的基类privateViewModelBase_currentFrame;publicViewModelBaseCurrentFrame{get{return_currentFrame;}privateset{if(value==_currentFrame)return;_currentFrame=值;OnPropertyChanged(()=>CurrentFrame);示例:......这将为您提供符合MVVM的标准,因为您不需要基于DataTemplate动态重新创建视图,您可以按照此处的建议进行操作并将其扩展到您的需要。以上就是C#学习教程:BindContentControltoUserControl,复用同一个实例共享的所有内容。如果对你有用,需要了解更多C#学习教程,希望大家多多关注——本文来自网络收集,不代表立场,如涉及侵权,请点击右转联系管理员删除。如需转载请注明出处:
