将WPF mainWindow TextBox绑定到在用户控件C#中计算的变量

时间:2011-03-07 09:04:35

标签: wpf user-controls binding

我的主窗口上有一个textBox,我有一个带有Images(Bitmaps)的用户控件。通过鼠标单击图像,计算值。该值应显示在主窗口的textBox中。 1)没有数据绑定 如何从用户控件访问主窗口上的textBox对象。它反过来工作,即我可以使用用户控件的名称从主窗口访问用户控件textBox,并使用textBox访问textBox,例如usercontrol1.textBoxName。 但在我看来,我无法从用户控件(如mainWindow.textBoxName)访问主窗口textBox,因为用户控件不知道主窗口并且没有主窗口对象。它是否正确? 2)具有数据绑定 它可能适用于数据绑定。但到目前为止我所尝试的并没有奏效。在主窗口XAML中:

TextBox  Text="{Binding Path=usercontrol1.GetCycleNumber()}"   Name="cycleNumberBox" 
在mainWindow.cs中:

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"); 

在用户控件中。但是,我无法访问此方法。 因为我已经花了几天时间来解决这个问题,所以我很乐意提供任何帮助。 我是初学者,这是我的第一个项目。谢谢!

1 个答案:

答案 0 :(得分:1)

如果您的用户控件需要与主窗口(或用户控件的任何容器)共享一段数据,最好的办法是使用数据绑定。

  1. 在用户控件上公开依赖项属性。在您的情况下,它看起来像CycleNumber。
  2. 在内部,用户控件可以根据需要使用此依赖项属性。如果它是计算字段,您可能希望使用RegisterReadOnly()方法来注册依赖项属性。

    2a上。要让其他控件访问CycleNumber中的值,您可以使用ElementBinding绑定到依赖项属性,或者

    2B。将依赖项属性绑定到ViewModel中的值(如果您没有遵循MVVM模式,则绑定到其他结构中)。

    如果您还需要更多内容,我可以为您提供一些示例代码。

    希望有所帮助。   塞尔吉奥