2013-07-01 2 views
0

Задайте вопрос начинающему. У меня есть приложение, которое я создал в качестве эксперимента, (C#, XAML). В моих основных окнах у меня есть 2 текстовых поля. Первое текстовое поле - это значение, которое пользователь вводит в том, что столбец в GridView будет умножен на заполнение GridView. Второй столбец - это значение, которое пользователь вводит при отображении количества строк в gridview. Очевидно, у меня есть gridview на этой же странице, которая имеет 2 столбца.Привязать все элементы окна к объекту

Что я пытаюсь сделать, когда пользователь вводит значение в любом из текстовых полей, GridView автоматически заполняет столбцы и строки. Как я могу это сделать?

Мой класс:

общественного класса MyClass: INotifyPropertyChanged { Int = 0 значение а; int myRows = 0; private ObservableCollection myCollection = new ObservableCollection();

 public event PropertyChangedEventHandler PropertyChanged; 

     private void NotifyPropertyChanged(String propertyName = "") 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
      } 
     } 

     public int ValueA 
     { 
      get { return valueA; } 
      set 
      { 
       valueA = value; 

       NotifyPropertyChanged(); 
      } 

     } 

     public int MyRows 
     { 
      get { return myRows; } 
      set 
      { 
       myRows = value; 
       NotifyPropertyChanged(); 
      } 
     } 

     private myGridValues PopulateGridValues() 
     { 
      myCollection.Clear(); 
      double tempColumn2Value = 0; 
      for (int i = 0; i <= myRows - 1; i++) 
      { 
       myGridValues tempGridValueClass = new myGridValues(i + 1, tempColumn2Value); 
       tempColumn2Value = tempColumn2Value * valueA; 
       myCollection.Add(tempGridValueClass); 
      } 
      NotifyPropertyChanged(); 
      return myCollection; 
     } 

     public ObservableCollection<myGridValues> MyCollection 
     { 
      get { return myCollection; } 
     } 

     class myGridValues 
     { 
      int column1Value = 0; 
      double column2Value = 0; 

      public myGridValues(int a, double b) 
      { 
       column1Value = a; 
       column2Value = b; 
      } 
     } 
    }My XAML for GridView<GridView x:Name="MyGridView" ItemsSource="{Binding Path=MyCollection}"> 
       <GridView.ItemTemplate> 
        <DataTemplate> 
         <StackPanel Orientation="Horizontal"> 
          <TextBlock Text="{Binding Column1Value}" Foreground="White" Margin="0,0,25,0"/> 
          <TextBlock Text="{Binding Column2Value}" Foreground="White" Margin="0,0,25,0"/> 
         </StackPanel> 
        </DataTemplate> 
       </GridView.ItemTemplate> 
      </GridView> 

Pardon my не понимая. Я получаю gridview для заполнения строками. (Я могу сказать, что они есть, потому что, если вы наведите указатель мыши на gridview, они там, но значения в текстовом поле каждого столбца пусты) Что я делаю неправильно?

Допустим, у нас есть приложение, и на главной странице есть 3 элемента управления. 2 текстовых поля и 1 gridview. Предположим, что в конструкторе страницы у меня это есть.

общественный myClass mc = новый myClass();

public MainWindow() 
    { 
     this.InitializeComponent(); 
     this.DataContext = mc;  MyGridView.ItemSource = mc.MyCollection 
     ...The two text boxes are just numerical values. The first textbox is how the values will be populated, and the second textbox tellsthe grid how many rows to make.So lets say that in the first textbox the user types in "2"And the second they type in 5. Meaning, "Do this 5 times"The grid has two columns, the first column is just the counter and the second column is the value. Therefore the grid would be populated as such1 22 43 84 165 32The text of both textboxes is bound to the class, "mc", properties 

Так как вы можете увидеть, если пользователь вводит значение в любом текстовом поле, потому что они связаны с классом, то GridView automaticallygets updated.The проблема у меня была в том, что я получил строки для заполнения GridView, но значений в столбцах нет. Но тем не менее, режим indebug, я вижу, что свойство ObservableCollection класса mc действительно заполнено требуемыми значениями. Я не привязываю текстовые поля в GridView правильно?

ответ

0

Поскольку этот эксперимент, я думаю, вы найдете хорошее направление here. они используют список вместо коллекции, но это не имеет значения, mvc и встроенная функциональность - это то, что вы ищете, и это довольно хороший пример.

+0

Оцените это, но я использую XAML и C#. Я предпочел бы использовать наблюдаемую коллекцию. – Tony

0

Реализовать INotifyPropertyChanged в классе/свойствах myGridValues.

Почему вы вызываете NotifyPropertyChanged в методе PopulateGridValues? ObservableCollection уже обрабатывает это для вас (для его элементов).

Предлагаю вам ознакомиться с образцами (C#/XAML) и как работают основы. http://code.msdn.microsoft.com/windowsapps/site/search?f%5B0%5D.Type=ProgrammingLanguage&f%5B0%5D.Value=C%23&f%5B0%5D.Text=C%23

+0

К сожалению, это была опечатка. Строки заполняют gridview, но значения не отображаются в текстовых окнах отдельных строк. Что я делаю не так? – Tony

+0

Да, строки сетки заполняются, но привязка соты не будет работать, если вы не предоставляете класс, который реализует INotifyPropertyChanged. – Alexander

Смежные вопросы