我的主窗口上有一个textBox,我有一个带有Images(Bitmaps)的用户控件。通过鼠标单击图像,计算值。该值应显示在主窗口的textBox中。 1)没有数据绑定 如何从用户控件访问主窗口上的textBox对象。它反过来工作,即我可以使用用户控件的名称从主窗口访问用户控件textBox,并使用textBox访问textBox,例如usercontrol1.textBoxName。 但在我看来,我无法从用户控件(如mainWindow.textBoxName)访问主窗口textBox,因为用户控件不知道主窗口并且没有主窗口对象。它是否正确? 2)具有数据绑定 它可能适用于数据绑定。但到目前为止我所尝试的并没有奏效。在主窗口XAML中:
TextBox Text="{Binding Path=usercontrol1.GetCycleNumber()}" Name="cycleNumberBox"
public partial class MainWindow : Window , INotifyPropertyChanged
我添加了INotifyPropertyChanged
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string propertyName)
{
PropertyChangedEventHandler handler = this.PropertyChanged;
if (handler != null)
{
handler(this, new PropertyChangedEventArgs(propertyName));
}
}
public void CycleChanged()
{
this.cycleNumber = usercontrol1.GetCycleNumber();
if (this.cycleNumberBox.Text != cycleNumber)
{
this.cycleNumberBox.Text = cycleNumber;
RaisePropertyChanged("cycleNumber");
}
}
usercontrol1.cs 现在,我必须用
表示改变RaisePropertyChanged("cycleNumber");
在用户控件中。但是,我无法访问此方法。 因为我已经花了几天时间来解决这个问题,所以我很乐意提供任何帮助。 我是初学者,这是我的第一个项目。谢谢!
答案 0 :(得分:1)
如果您的用户控件需要与主窗口(或用户控件的任何容器)共享一段数据,最好的办法是使用数据绑定。
在内部,用户控件可以根据需要使用此依赖项属性。如果它是计算字段,您可能希望使用RegisterReadOnly()方法来注册依赖项属性。
2a上。要让其他控件访问CycleNumber中的值,您可以使用ElementBinding绑定到依赖项属性,或者
2B。将依赖项属性绑定到ViewModel中的值(如果您没有遵循MVVM模式,则绑定到其他结构中)。
如果您还需要更多内容,我可以为您提供一些示例代码。
希望有所帮助。 塞尔吉奥