将窗口的所有元素绑定到对象

本文关键字:绑定 对象 元素 窗口 | 更新日期: 2023-09-27 18:20:31

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

我想做的是,当用户在其中一个文本框中键入值时,GridView将自动填充列和行。我该怎么做?

我的班级:

公共类myClass:INotifyPropertyChanged{int值A=0;int myRows=0;private ObservableCollection myCollection=新建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>

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

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

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的行,但列中的值不在那里。但是,在indebug模式下,我可以看到类mc的ObservableCollection属性确实填充了所需的值。我是否没有正确绑定GridView中的文本框?

将窗口的所有元素绑定到对象

由于这是一个实验,我认为你会在这里找到好的方向。他们使用列表而不是集合,但这并不重要,mvc和内置功能正是您所寻求的,这是一个很好的例子。

在myGridValues类/属性中实现INotifyPropertyChanged。

为什么在PopulateGridValues方法中调用NotifyPropertyChanged?ObservableCollection已经为您(为其项目)处理了这个问题。

我建议您看一下示例(C#/XAML)以及基础知识是如何工作的。http://code.msdn.microsoft.com/windowsapps/site/search?f%5B0%5D.Type=ProgrammingLanguage&f%5B0%5D。值=C%23&f%5B0%5D.Text=C%23