2017-02-08 5 views
1

これは私の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();選択された学生を取得します。 XAMLファイルでは、すべてのテキストボックス要素がパブリックプロパティSTUからテキストを取得します。 私の主な問題はとてもシンプルでありながら混乱しています。パブリックオブジェクトの変更、つまりSTUはプライベートオブジェクトstuを変更しますが、元のコレクションTeacher.all_the_classes_under_teacherを変更するにはどうすればいいですか?私の元のコレクションにホバリングして変更を見ることができるように、私はWorking.edit_student_data(stu);にブレークポイントを入れます。

答えて

0

ソースコレクションから生まれた生徒オブジェクトの同じインスタンスを使用しているため、すべての場所が変更されます。

あなたが返す学生のインスタンスSelected_studentは、ViewModelとxamlバインディングで使用されるものです。バインドされたプロパティのテキストボックスを編集してプロパティを変更すると、実際にあなたのコレクションの中に座っている元のインスタンスを編集しています。

Public STU(と同様にprivate stu)は、Selected_Studentから返されたのと同じオブジェクトです。

関連する問題