Autor Beitrag
doubleII
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Mo 11.02.19 21:26 
Hallo, kann mir jemand sagen wie könnte man eine Zeile aus der DataGrid aktualisieren?

xaml
ausblenden XML-Daten
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
 <Grid>
                <DataGrid 
                    Name="Grid" 
                    ItemsSource="{Binding Path=Item, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                    SelectedItem="{Binding Path=SelectedRow, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
                    IsReadOnly="True"
                    CanUserAddRows="False"
                    CanUserDeleteRows="False"
                    AutoGenerateColumns="True"
                    AutoGeneratingColumn="Grid_OnAutoGeneratingColumn">
                    <DataGrid.ContextMenu>
                        <ContextMenu>
                             <MenuItem Header="Update" Command="{Binding Path=BtnUpdate}"/>
                        </ContextMenu>
                    </DataGrid.ContextMenu>
           
                </DataGrid>
 </Grid>

ViewModel
ausblenden volle Höhe C#-Quelltext
1:
2:
3:
4:
5:
6:
7:
8:
9:
10:
11:
12:
13:
14:
15:
16:
17:
18:
19:
20:
21:
22:
23:
24:
25:
26:
27:
28:
29:
30:
31:
32:
33:
34:
35:
36:
  public RelayCommand BtnUpdate { get; set; }

   public ObservableCollection<User> Item
   {
       get
        { return _user; }
       set
         {
          _user = value;
           OnPropertyChanged(nameof(Item));
          }
   }

  public User SelectedRow
   {
       get { return _selectedRow;}
       set
       {
          _selectedRow = value;
          OnPropertyChanged(nameof(SelectedRow));
        }
    }

    public void AddColumn()
    {
            BtnUpdate = new RelayCommand(Select);
            Item.Add(new User() { Name = "Jane", Age=26, Mail = "hello@gmail.com"});
            
    }

    private void Select(object obj)
        {
            if (SelectedRow is null)
                return;
           //TODO edit Name to Tom for example _selectedRow
        }


Das Problem ist, ich aktualisiere nicht direct SelectedRow proprerty, sondern die User class Properties (Name, Age, Mail) und die OnPropertyChanged Methode wird nicht aufgerufen.
OnPropertyChanged wird aufgerufen, sobald ich auf die DataGrid klicke.


Danke!
Christian S.
ontopic starontopic starontopic starontopic starontopic starontopic starhalf ontopic starofftopic star
Beiträge: 20451
Erhaltene Danke: 2264

Win 10
C# (VS 2019)
BeitragVerfasst: Mo 11.02.19 23:18 
Wenn ich dich richtig verstanden habe, muss auch die User-Klasse das INotifyPropertyChanged-Interface implementieren, sodass über Änderungen an den Eigenschaften benachrichtigt wird.

_________________
Zwei Worte werden Dir im Leben viele Türen öffnen - "ziehen" und "drücken".
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 12.02.19 09:26 
Hallo Christien,

das wollte ich eben vermeiden. Eine Model-Klasse implementiert INotifyPropertyChanded-Interface.
Ich selber komme ich auch nicht auf andere Lösung des Problems. Ist es gute Praxis, wenn eine Model-Klasse diesen Interface implementiert?

Gruß
Th69
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Moderator
Beiträge: 4764
Erhaltene Danke: 1052

Win10
C#, C++ (VS 2017/19/22)
BeitragVerfasst: Di 12.02.19 10:22 
Was passiert denn, wenn du in der Methode dann auch OnPropertyChanged(nameof(SelectedRow)) aufrufst?

PS: Die Eigenschaft Item solltest du im Plural (also Items) benennen.
Chiyoko
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 298
Erhaltene Danke: 8

Win 98, Win Xp, Win 10
C# / C (VS 2019)
BeitragVerfasst: Di 12.02.19 12:00 
Hallo,

eventuell hilft dir nachfolgendes Nuget Package.
Die Library ist Open Source.

Obsolate INotifyPropertyChanged
Nuget Upate Controls
doubleII Threadstarter
ontopic starontopic starontopic starontopic starontopic starontopic starontopic starontopic star
Beiträge: 52



BeitragVerfasst: Di 12.02.19 13:04 
Zitat:
Was passiert denn, wenn du in der Methode dann auch OnPropertyChanged(nameof(SelectedRow)) aufrufst?

ich habe getestet, passiert nichts.

Zitat:
PS: Die Eigenschaft Item solltest du im Plural (also Items) benennen.

danke ;)

Zitat:
eventuell hilft dir nachfolgendes Nuget Package.
Die Library ist Open Source.

Danke, ich versuche zu verstehen, wie man so ein Problem zu fuss lösen kann. Wahrscheinlich auf andere Weise schafft man nicht.

- Entweder ein nuget packet kommt in Frage oder das Model-Klass implementiert INotifyPropertyChanged


P.P. mein Model-Klass implementiert jetzt INotifyPropertyChanged. Sauber oder nicht, lasse ich es so. :)