为什么这些标签似乎共享同一个文本框?我已经在xaml中定义了我的UI,下面是我的代码:当我运行我的程序时。我可以添加很多标签没问题。标题不同,但是每当我更改其中一个标签中文本框的内容时,其他标签中的所有文本框都会更改为相同的内容(就好像它们都共享相同的文本框,或者绑定到相同的源一样,这很奇怪)。我在定义UI时犯了错误吗?请帮助我并提前致谢。这是我的模型,非常简单:usingSystem;使用System.Collections.ObjectModel;使用System.ComponentModel;namespaceMyHomework__MVVM_{classMyHomeworkModel:INotifyPropertyChanged{privatestringheader,text;公共事件PropertyChangedEventHandlerPropertyChanged;publicstringHeader{get{返回标题;}设置{标题=值;OnPropertyChanged("标题");}}publicstringText{get{返回文本;}设置{文本=值;OnPropertyChanged("文本");}}privatevoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));}}}}而我的viewmodel,仍然非常简单:usingMyHomework;使用System.Collections.ObjectModel;使用System.ComponentModel;使用System.Windows.Input;namespaceMyHomework__MVVM_{classMyHomeworkViewModel:INotifyPropertyChanged{privateObservableCollectionallTabs;私有MyHomeworkModelselectedTab;公共事件PropertyChangedEventHandler属性改变了;publicMyHomeworkViewModel(){allTabs=newObservableCollection();selectedTab=newMyHomeworkModel();AddCourseCommand=newAddCourseCommand(这个);}publicObservableCollectionAllTabs{get{returnallTabs;}设置{allTabs=值;OnPropertyChanged("AllTabs");}}publicMyHomeworkModelSelectedTab{get{returnselectedTab;}设置{selectedTab=value;OnPropertyChanged("SelectedTab");}}publicICommandAddCourseCommand{get;私有集;}publicvoidAddNewTab(){NewCourseNamencn=newNewCourseName();ncn.ShowDialog();if(ncn.courseName!=null){MyHomeworkModelnewTab=newMyHomeworkModel();newTab.Header=ncn.courseName;newTab.Text=ncn.courseName;AllTabs.Add(newTab);选定标签=新标签;}}privatevoidOnPropertyChanged(stringpropertyName){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));}}}}编辑:刚注意到我收到了这条消息:System.Windows.DataError:40:BindingE表达式路径错误:在“对象”“MyHomeworkViewModel”(HashCode=31265986)上找不到“文本”属性。绑定表达式:路径=文本;DataItem='MyHomeworkViewModel'(HashCode=31265986);目标元素是'TextBox'(Name='');目标属性是“文本”(类型“字符串”)我想我知道它为什么抱怨我的Text属性是MyHomeworkModel而不是MyHomeworkViewModel...但是为什么我可以将它绑定到MyHomeworkModel中的Header属性?我的AddCourseCommand类:使用系统;使用System.Collections.Generic;使用System.Linq;使用系统文本;使用System.Threading.Tasks;使用System.Windows.Input;namespaceMyHomework__MVVM_{classAddCourseCommand:ICommand{privateMyHomeworkViewModelviewModel;publicAddCourseCommand(MyHomeworkViewModelviewModel){this.viewModel=viewModel;}publiceventEventHandlerCanExecuteChanged{添加{CommandManager.RequerySuggested+=value;}删除{CommandManager.RequerySuggested-=值;}}publicboolCanExecute(objectreurameter)true;}publicvoidExecute(objectparameter){viewModel.AddNewTab();}}}您的模型似乎实现了ObservableCollection。删除这个基类,它应该可以工作。编辑:您需要更改:AddCourseCommand=newAddCourseCommand(this);下载DelegateCommandAddCourseCommand=newDelegateCommand(AddNewTab);编辑:您可以从UI中剪切ViewModel。您将实例复制到您的命令,然后调用该副本添加。这是错误的,归咎于你的错误。我真的建议你使用DelegateCommand这可能会解决它。你的猜测:我想我知道它为什么抱怨。我的Text属性是MyHomeworkModel而不是MyHomeworkViewModel...但是为什么我可以将它绑定到MyHomeworkModel中的Header属性?您的属性在MyHomeworkModel中是正确的,而不是在您绑定到包含MyHomeworkModel的列表的MyHomeworkModel中。现在您添加Binding将设置在最低级别的新项目。在这种情况下,你的MyHomeworkModel而不是MyHomeworkViewModel以上是C#学习教程:为什么这些标签似乎共享同一个文本框?如果所有分享的内容对你有用,需要进一步了解C#学习教程,希望大家多多关注。本文收集自网络,不代表立场。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
