Привязать WPF mainWindow TextBox к переменной, рассчитанной в пользовательском элементе управления C # - PullRequest
0 голосов
/ 07 марта 2011

У меня есть текстовое поле в моем главном окне, и у меня есть пользовательский элемент управления с изображениями (растровые изображения). С помощью щелчка мышью на изображении, значение рассчитывается. Это значение должно отображаться в текстовом поле в главном окне. 1) без привязки данных Как я могу получить доступ к объекту textBox в главном окне из пользовательского элемента управления. Это работает наоборот, то есть я могу получить доступ к textBox пользовательского элемента управления из главного окна, используя имя пользовательского элемента управления и textBox для доступа к textBox, например usercontrol1.textBoxName. Но мне кажется, что я не могу получить доступ к главному окну textBox из пользовательского элемента управления, такого как mainWindow.textBoxName, потому что пользовательский элемент управления не знает главное окно и не имеет основного объекта Window. Это правильно? 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 Ответ

1 голос
/ 07 марта 2011

Если у вас есть пользовательский элемент управления, которому нужно предоставить доступ к части данных в главном окне (или для любого контейнера пользовательского элемента управления), лучше всего использовать привязку данных.

  1. Предоставить свойство зависимостей для пользовательского элемента управления. В вашем случае это выглядит как CycleNumber.

Внутренне пользовательский элемент управления может использовать это свойство зависимости по мере необходимости. Если это вычисляемое поле, вы можете использовать метод RegisterReadOnly () для регистрации свойства зависимости.

2a. Чтобы другие элементы управления имели доступ к значению в CycleNumber, вы можете использовать ElementBinding для привязки к свойству зависимости или

2b. иметь привязку свойства зависимости к значению в вашей ViewModel (или другой структуре, если вы не следуете шаблону MVVM).

Если вам нужно больше, я могу предложить вам пример кода.

Надеюсь, это поможет. Sergio

...