C# wpF MVVM Datagrid Problem

Gast #4724350
Lesenswert?

Hallo zusammen,

ich versuche mich gerade etwas in C# WPF MVVM und habe ein Problem. Ich 
möchte eine Zeile auswählen und mit Hilfe von Contextmenu eine Message 
anzeigen. Mit dem Inhalt:
1. welche Zeile ausgewählt wurde
2. was ist der Inhalt der ersten Spalte von dieser Zeile?
Ich habe schon Stunden verbracht, um eine Lösung zu finden und komme mit 
keiner der Vorschläge zu recht.

Kann mir einer helfen und sagen wie ich das machen kann? Hier ist mein 
Code:

XAML- Code
1
     <DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False" IsReadOnly="True" Margin="5,50,5,25">
2
            <DataGrid.Columns>
3
                <DataGridTextColumn Header="number" Binding="{Binding number}"/>
4
                <DataGridTextColumn Header="name" Binding="{Binding name}"/>
5
            </DataGrid.Columns>
6
            <DataGrid.ContextMenu>
7
                <ContextMenu >
8
                    <MenuItem Header="open customer" Command="{Binding Path=OpenCustomerCommand}"/>
9
                </ContextMenu>
10
            </DataGrid.ContextMenu>
11
        </DataGrid>

ViewModel- Code
1
    class CustomerOverviewViewModel : DependencyObject
2
    {
3
        public ICommand OpenCustomerCommand { get; set; }
4

5
        public ICollectionView Items
6
        {
7
            get { return (ICollectionView)GetValue(ItemsProperty); }
8
            set { SetValue(ItemsProperty, value); }
9
        }
10

11
        // Using a DependencyProperty as the backing store for MyProperty.  This enables animation, styling, binding, etc...
12
        public static readonly DependencyProperty ItemsProperty =
13
            DependencyProperty.Register("Items", typeof(ICollectionView), typeof(CustomerOverviewViewModel), new PropertyMetadata(null));
14

15
        public CustomerOverviewViewModel()
16
        {
17
            OpenCustomerCommand = new RelayCommand(arg => OpenCustomerMethod());
18
            Items = CollectionViewSource.GetDefaultView(LinkToMySQL.GetDBData("customers"));
19
        }
20

21
        private void OpenCustomerMethod()
22
        {
23

24
            MessageBox.Show("selected row + name"); // hier soll die Aswahl angezeigt werden
25
        }
26
    }

ViewModel- Code
1
class LinkToMySQL
2
    {
3
        public static DataTable GetDBData(string DBtable)
4
        {
5
            string stringDB = ConfigurationManager.ConnectionStrings["MysqlConnectionString"].ConnectionString;
6
            DataTable dt = new DataTable();
7
            try
8
            {
9
                using (MySqlConnection myConn = new MySqlConnection(stringDB))
10
                {
11
                    MySqlCommand cmd = new MySqlCommand("select * FROM " + DBtable + "", myConn);
12
                    myConn.Open();
13
                    
14
                    dt.Load(cmd.ExecuteReader());
15
                    return dt;
16
                }
17
            }
18
            catch (Exception ex)
19
            {
20
                MessageBox.Show(ex.Message);
21
            }
22
            return dt;
23
        }
24
    }
Gast #4725755
Lesenswert?

Hallo Stefan,

wen Du in deinem ViewModel noch eine weiter Property einfügst und die 
vom DataGrid selektierte Zeile daran bindest, hast Du in 
OpenCustomerMethod Zugriff darauf.

ViewModel:
1
...
2
public object SelectedItem { get; set; } // Statt object am besten den konkreten Typ Deiner Daten nehmen (und bei Bedarf INotifyPropertyChanged umsetzen).
3

4
private void OpenCustomerMethod()
5
{
6
  MessageBox.Show("Selected: " + this.SelectedItem.Name);
7
}
8
...

XAML-Code:
1
<DataGrid ... SelectedItem="{Binding SelectedItem}">
2
  ...
3
</DataGrid>

Antwort schreiben

Bitte melde dich an, um einen Beitrag zu schreiben.

oder

Mit Google-Account einloggen

Die Registrierung ist kostenlos und dauert nur eine Minute.

Jetzt registrieren