WPF中如何将Window的值传递给UserControl我想将MainWindow的值传递给我的UserControl!我向我的UserControl传递了一个值,UserControl向我显示了MessageBox中的值,但它没有显示TextBox中的值。这是我的代码:MainWindow(将值得传给UserControl)try{GroupsItemsabc=null;if(abc==null){abc=newGroupsItems();abc.MyParent=这个;abc.passedv(e.ToString(),这个);}}catch(Exceptionee){MessageBox.Show(ee.Message);}用户控件publicpartialclassGroupsItems:UserControl{publicMainWindowMyParent{get;放;}字符串idd="";publicGroupsItems(){InitializeComponent();数据();}publicvoidpassedv(stringid,MainWindowmp){idd=id.ToString();MessageBox.Show(idd);数据();}publicvoiddata(){if(idd!=""){MessageBox.Show(idd);texbox.Text=idd;}}}编辑(使用BINDING和INotifyProperty)…..publicGroupsItems(){InitializeComponent();}publicvoidpassedv(){textbox1.Text=Text;}}publicclassGroupitm:INotifyPropertyChanged{privatestring_text="";publicstringText{get{return_text;}set{if(value!=_text){_text=value;NotifyPropertyChanged();}}}公共事件PropertyChangedEventHandlerP属性已更改;protectedvoidNotifyPropertyChanged(StringpropertyName=""){if(PropertyChanged!=null){PropertyChanged(this,newPropertyChangedEventArgs(propertyName));这里的问题是在后面的代码中创建新对象时,引用会创建新对象,这与xaml代码中的object不同。所以你应该使用下面的代码:在后面的代码中,你不必创建新的对象。您应该使用在XAML中添加的对象:...myGroupsItems.MyParent=this;myGroupsItems.passedv(e.ToString(),这个);...这是示例解决方案(sampleproject)。您在构造函数中调用数据,而idd仍为“”,这导致文本框仍然为空。更改MyParent属性不会更改它。只通过了但是你没有父集。只需在passedv上调用数据即可。试试这个:publicpartialclassGroupsItems:UserControl{//属性和方法privatestringidd="";公共字符串IDD{get{returnidd;}set{idd=value;textBox1.Text=idd;}}//其他属性和方法}用法:在你的主窗体中:abc=newGroupsItems();abc.IDD="sometext";MainGrid1.Children.Add(abc);//绑定示例中UserControl的网格或任何其他容器,您的GroupItem类看起来没问题,除了您需要传入更改的属性的名称:publicstringText{get{return_text;}set{if(value!=_text){_text=value;NotifyPropertyChanged("文本");现在,在GroupsItems中,您不应该访问TextBox。在WPF中,我们操作数据,而不是UI...但是当我们使用Binding对象将数据绑定到UI控件时,它们会自动更新(如果我们正确实现INotifyPropertyChanged接口)。首先,让我们在您的代码中添加一个数据属性(它还应该实现INotifyPropertyChanged接口),就像在GroupItem类中一样:privateGroupItem_item=newGroupItem();publicGroupItemItem{get{return_item;}set{if(value!=_item){_item=value;NotifyPropertyChanged("项目");现在让我们尝试在TextBox.Text属性上使用Binding:看看我们如何将GroupItem类的Text属性绑定到TextBox.Text属性...现在我们需要做的就是更改Item的值。Text属性并观察它在UI中的更新:...privatevoidButton_Click(objectsender,RoutedEventArgse){Item.Text="Canyouseemenow?";或者,如果您想在项目的其他地方调用此代码,您可以将此代码放在passedv方法中。让我知道你是怎么做的。更新>>>在GroupItem类中,尝试将初始化更改为:privatestring_text="Anytextvalue";您现在可以在运行应用程序时在UI中看到该文本吗?如果没有,则尝试将整个Text属性添加/复制到后面的代码中,并将TextBox声明更改为:如果您现在看不到文本值,那么您确实有问题......您已经在代码INotifyPropertyChanged接口,不是吗?以上就是C#学习教程的全部内容:WPF中如何将窗口的值传递给UserControl。如涉及侵权,请点击右侧联系管理员删除。如需转载请注明出处:
