Da Sie wollen, was angezeigt wird im Gegensatz zu den Daten Ihrer Klasse die Eigenschaften, die Sie brauchen, um zu greifen die Daten von der Steuerung direkt.
var sb =newStringBuilder();foreach(var item inthis.listview1.SelectedItems){var lvi =this.listview1.ItemContainerGenerator.ContainerFromItem(item)asListViewItem;var cell =this.GetVisualChild<ContentPresenter>(lvi);var txt = cell.ContentTemplate.FindName("txtCodCli", cell)asTextBlock;
sb.Append(txt.Text);//TODO: grab the other column's templated controls here & append text}System.Windows.Clipboard.SetData(DataFormats.Text, sb.ToString());
public T GetVisualChild<T>(Visual parent)where T :Visual{
T child =default(T);int numVisuals =VisualTreeHelper.GetChildrenCount(parent);for(int i =0; i < numVisuals; i++){Visual v =(Visual)VisualTreeHelper.GetChild(parent, i);
child = v as T;if(child ==null){
child =GetVisualChild<T>(v);}if(child !=null){break;}}return child;}
hellom das wird nicht funktionieren: hier ein Stück der XAML-Code: <ListView.View> <GridView> <GridViewColumn Width="80"> <GridViewColumnHeader Content="Cod. Cli."></GridViewColumnHeader> <GridViewColumn.CellTemplate> <DataTemplate> <StackPanel> <TextBlock TextAlignment="Left" Text="{Binding Path=VFT_CLI_CODICE}" /> </StackPanel> foreach(var item in this.listview1.SelectedItems) { var lvi =.listview1.ItemContainerGenerator.ContainerFromItem(item) als ListViewItem; var myBoundItem = lvi.Inhalt as MyClass; sb.AppendLine(myBoundItem.VFT_CLI_CODICE); } System.Windows.Zwischenablage.SetData(DataFormats.Text -, sb.ToString()); Wobei "MyClass" ist, was ein Objekt hat, dass VFT_CLI_CODICE Eigenschaft. das funktioniert, aber ich brauche zu erhalten, programmgesteuert die Spalten sichtbar auf der ListView, da nicht alle das Feld von "MyClass" angezeigt werden. und auf irgendeinem Feld bin ich die Anwendung einiger Konverter, und möchten die Daten in die Zwischenablage kopiert, mit dem format! Dieses scheitern wird für virtualisierte Listen (D. H. die Standardeinstellung), da die Container nicht vorhanden sind für die meisten Elemente, die sich aktuell nicht in Sicht.
Ich würde denken, Sie hätte zu überwachen SelectionChanged-events und formatieren Sie dann die Elemente in einem bestimmten text-format und dann nutzen Sie die Zwischenablage.Die SetText-Methode, um die Elemente in die Zwischenablage.
Da Sie wollen, was angezeigt wird im Gegensatz zu den Daten Ihrer Klasse die Eigenschaften, die Sie brauchen, um zu greifen die Daten von der Steuerung direkt.
Dies setzt Voraus, dass in der XAML-Sie haben
"Wo GetVisualChild T ist
foreach(var item in this.listview1.SelectedItems) { var lvi =.listview1.ItemContainerGenerator.ContainerFromItem(item) als ListViewItem; var myBoundItem = lvi.Inhalt as MyClass; sb.AppendLine(myBoundItem.VFT_CLI_CODICE); } System.Windows.Zwischenablage.SetData(DataFormats.Text -, sb.ToString()); Wobei "MyClass" ist, was ein Objekt hat, dass VFT_CLI_CODICE Eigenschaft.
das funktioniert, aber ich brauche zu erhalten, programmgesteuert die Spalten sichtbar auf der ListView, da nicht alle das Feld von "MyClass" angezeigt werden. und auf irgendeinem Feld bin ich die Anwendung einiger Konverter, und möchten die Daten in die Zwischenablage kopiert, mit dem format!
Dieses scheitern wird für virtualisierte Listen (D. H. die Standardeinstellung), da die Container nicht vorhanden sind für die meisten Elemente, die sich aktuell nicht in Sicht.
InformationsquelleAutor Software.Developer
Ich würde denken, Sie hätte zu überwachen SelectionChanged-events und formatieren Sie dann die Elemente in einem bestimmten text-format und dann nutzen Sie die Zwischenablage.Die SetText-Methode, um die Elemente in die Zwischenablage.
http://msdn.microsoft.com/en-us/library/system.windows.clipboard.aspx
InformationsquelleAutor Adam Driscoll