2016-09-24 4 views
0

Ich habe diese Methoden. Ich kann einen Eintrag in der Sammellistenansicht doppelklicken und die Double_Click-Methode wird ausgelöst und ich erhalte das Meldungsfeld. Was ich nicht herausfinden kann ist, wie man das Item selbst eingibt, damit ich auf den String-Wert zugreifen kann, der in der 'WWPN'-Spalte steht. Ich möchte das als Parameter an eine andere Methode übergeben, die etwas sucht. Es ist so einfach, den Absender zurück zu einem Listenelement oder einem Port-Ergebnis zu werfen?Übergabe des Listenfeldelements an DoubleClick-Ereignis

private void BrowseFlogiDatabase_Click(object sender, RoutedEventArgs e) 
    { 
     CollectionWindow cw = new CollectionWindow(this.VirtualFabricList); 

     GridView grid = new GridView(); 
     GridViewColumn FCPortColumn = new GridViewColumn(); 
     FCPortColumn.Header = "FC Port"; 
     FCPortColumn.Width = Double.NaN; 
     FCPortColumn.DisplayMemberBinding = new Binding("FCPort"); 

     GridViewColumn WWPNColumn = new GridViewColumn(); 
     WWPNColumn.Header = "WWPN"; 
     WWPNColumn.Width = Double.NaN; 
     WWPNColumn.DisplayMemberBinding = new Binding("WWPN"); 

     GridViewColumn FCIDColumn = new GridViewColumn(); 
     FCIDColumn.Header = "FCID"; 
     FCIDColumn.Width = Double.NaN; 
     FCIDColumn.DisplayMemberBinding = new Binding("FCID"); 

     GridViewColumn SwitchNameColumn = new GridViewColumn(); 
     SwitchNameColumn.Header = "SwitchName"; 
     SwitchNameColumn.Width = Double.NaN; 
     SwitchNameColumn.DisplayMemberBinding = new Binding("SwitchName"); 

     grid.Columns.Add(FCPortColumn); 
     grid.Columns.Add(WWPNColumn); 
     grid.Columns.Add(FCIDColumn); 
     grid.Columns.Add(SwitchNameColumn); 

     cw.CollectionListView.View = grid; 
     ObservableCollection<PortResult> flogidatabase = new ObservableCollection<PortResult>(); 

     var cs = this.switchList.Where(c => c.switchName == this.ProcessedSwitchesListView.SelectedItem.ToString()); 
     foreach (KeyValuePair<string, FCPort> portpair in cs.FirstOrDefault().FlogiDatabase) 

     { 
      PortResult pr = new PortResult(); 
      pr.WWPN = portpair.Key.ToUpper(); 
      pr.FCPort = portpair.Value.ToString(); 



      pr.FCID = portpair.Value.WWPNList.Where(w => w.WWPNValue == pr.WWPN).Select(t => t.FCIDValue).FirstOrDefault().ToString(); 

      pr.SwitchName = cs.FirstOrDefault().switchName; 
      flogidatabase.Add(pr); 
     } 


     cw.CollectionListView.ItemsSource = flogidatabase; 

     FlogiAddDoubleClickEventStyle(cw, new MouseButtonEventHandler(FlogiDB_MouseDoubleClick)); 
     cw.Show(); 

    } 


private void FlogiDB_MouseDoubleClick(Object sender, EventArgs e) 
    { 


     MessageBox.Show("FlogiDatabase DoubleClick"); 
    } 
+0

Ich habe herausgefunden, dass ich Sender als System.Windows.Controls.ListViewItem casten kann, aber ich kann immer noch nicht herausfinden, wie man zu den Werten in ihm kommt. System.Windows.Forms hat auch ein ListViewItem, das SubItems enthält. Die meisten Beispiele verwenden das, aber das ListViewItem, das ich verwende, hat dieses Attribut nicht. –

Antwort

1

Ich fand die Antwort. Ich muss auf die DataContext-Eigenschaft des ListViewItem zugreifen. In Anbetracht der oben genannten Code:

ObservableCollection<PortResult> flogidatabase = new ObservableCollection<PortResult>(); 
CollectionWindow cw = new CollectionWindow(this.VirtualFabricList); 
cw.CollectionListView.ItemsSource = flogidatabase; 

Dann um zu bekommen, was in jedem ListViewItem gespeichert sind wir die Datacontext zurückgeworfen auf eine PortResult:

PortResult pr = ((PortResult)lvi.DataContext); 

Und wir können dann die Attribute in einem PortResult zugreifen.

string wwpn = pr.WWPN; 
Verwandte Themen