0

有一个新手问题。我有一个作为实验创建的应用程序(C#、XAML)。在我的主窗口中,我有 2 个文本框。第一个文本框是用户键入的值,将乘以 GridView 中的列以填充 GridView。第二列是用户键入的值,用于描述将在 gridview 中创建多少行。显然,我在同一页面上有一个 2 列的网格视图。

我想要做的是当用户在任一文本框中键入一个值时,GridView 将自动填充列和行。我怎样才能做到这一点?

我的课:

公共类 myClass : INotifyPropertyChanged { int valueA = 0; int myRows = 0; 私有 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>

请原谅我的不理解。我确实让 gridview 填充了行。(我可以说它们在那里,因为如果您将鼠标悬停在网格视图上,它们就在那里,但每行文本框中的值都是空白的)我做错了什么?

假设我们有一个应用程序,在主页上有 3 个控件。2个文本框和1个gridview。让我在页面的构造函数中有这个。

public myClass mc=new 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 会自动更新。我遇到的问题是,我得到了填充 GridView 的行,但是中的值列不存在。但是,在调试模式下,我可以看到 mc 类的 ObservableCollection 属性确实填充了所需的值。我没有正确绑定 GridView 中的文本框吗?

4

2 回答 2

0

因为这是一个实验,我想你会在这里找到好的方向。他们使用列表而不是集合,但这没关系,mvc 和内置功能是您正在寻找的,这是一个很好的例子。

于 2013-07-01T16:03:57.703 回答
0

在 myGridValues 类/属性中实现 INotifyPropertyChanged。

为什么在 PopulateGridValues 方法中调用 NotifyPropertyChanged?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

于 2013-07-02T06:40:02.297 回答