这个绑定如何改变我原来的收藏?

时间:2017-02-08 04:24:32

标签: c# visual-studio xaml mvvm uwp

这是我的xaml代码:

<Page.DataContext>
    <vm:EditStudentDataViewModel x:Name="ViewModel" />
</Page.DataContext>

<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
    <ScrollViewer>
    <StackPanel Padding="20" Margin="20">

        <TextBox  Text="{x:Bind ViewModel.STU.FirstName,Mode=TwoWay}" Header="First Name" />
        <TextBox Text="{x:Bind ViewModel.STU.LastName,Mode=TwoWay}" Header="Last Name" />
        <TextBox Text="{x:Bind ViewModel.STU.RollNumber,Mode=TwoWay}" Header="Roll Number" />
        <StackPanel Visibility="Visible" x:Name="buttons">
        <Button Content="Next" Name="Addmore"  Click="{x:Bind ViewModel.Addmore_Click}"/>
        <Button Content="Done" Name="done" Click="{x:Bind ViewModel.done_Click}"/>
        </StackPanel>
        <StackPanel Visibility="Collapsed" x:Name="edit_button" >
            <TextBox Header="Father Name" Text="{x:Bind ViewModel.STU.FatherName,Mode=TwoWay}"/>
                <TextBox Header="Mother Name" Text="{x:Bind ViewModel.STU.MotherName,Mode=TwoWay}"/>
                <TextBox Header="Father Contact No." Text="{x:Bind ViewModel.STU.FatherContactNumber,Mode=TwoWay}"/>
                <TextBox Header="Permanent Address" Text="{x:Bind ViewModel.STU.PermanetAddress,Mode=TwoWay}"/>
                <TextBox Header="Current Address" Text="{x:Bind ViewModel.STU.CurrentAddress,Mode=TwoWay}"/>
                <TextBox Header="Email Address" Text="{x:Bind ViewModel.STU.EmailAddress,Mode=TwoWay}"/>
            <Button Content="Done" Name="editbutton" Click="{x:Bind ViewModel.edit_student_data}"/>
        </StackPanel>

    </StackPanel>
    </ScrollViewer>
</Grid>

这是我在ViewModel中的C#代码:

class SomeClassName
{
    Student stu = Working.Selected_student();
    public Student STU { get { return stu; } set { stu = value; } }
    public void edit_student_data()
    {
        var hhjc = Teacher.all_the_classes_under_teacher;
        Working.edit_student_data(stu);
        Working.edit = false;
    }
}

这是我在其他课程中获取学生对象的功能:

public static Student Selected_student()
{
    try
    {
        var stu = Teacher.all_the_classes_under_teacher.Single(x => x.classname == Selected_class_name).
        studentList.Single(x => (x.FirstName + " " + x.LastName) == selected_student_name);
        return stu;
    }catch(Exception ee)
    {
        return new Student();
        }
    }

注意:我只发布了与此问题相关的相关代码。

我的ViewModel Student stu = Working.Selected_student();中的Stament检索所选的学生。在XAML文件中,所有文本框元素都从公共属性STU中检索文本。 我的主要问题很简单但又令人困惑。公共对象中的更改,即STU更改了私有对象stu但是如何更改我原始的Teacher.all_the_classes_under_teacher集合我在我的Viewmodel中的Working.edit_student_data(stu);上设置了断点,以便我可以通过以下方式查看更改徘徊在我原来的收藏中。

1 个答案:

答案 0 :(得分:0)

它随处可见,因为您使用的是源自源集合的学生对象的相同实例。

您从Selected_student返回的学生实例是您的Viewmodel和xaml绑定中使用的实例。当您通过编辑某个绑定属性的文本框来更改属性时;您实际上正在编辑原始实例,该实例仍然位于您的集合中。

Public STU(以及private stu)仍然是从Selected_Student返回的同一个对象。