Скопируйте элементы ListView в буфер обмена в WPF C # - PullRequest
6 голосов
/ 11 марта 2010

как я могу скопировать выбранные элементы в ListView WPF с привязкой к полям БД в буфер обмена?

спасибо Cristian

Ответы [ 2 ]

6 голосов
/ 11 марта 2010

Поскольку вы хотите, чтобы отображалось то, что отображается в отличие от данных о свойствах вашего класса, вам нужно будет напрямую получать данные из элементов управления.

        var sb = new StringBuilder();
        foreach(var item in this.listview1.SelectedItems)
        {
            var lvi = this.listview1.ItemContainerGenerator.ContainerFromItem(item) as ListViewItem;
            var cell = this.GetVisualChild<ContentPresenter>(lvi);
            var txt = cell.ContentTemplate.FindName("txtCodCli", cell) as TextBlock;
            sb.Append(txt.Text);
            //TODO: grab the other column's templated controls here & append text
        }
        System.Windows.Clipboard.SetData(DataFormats.Text, sb.ToString());

Это предполагает, что в вашем XAML есть

<TextBlock x:Name="txtCodCli" TextAlignment="Left" Text="{Binding Path=VFT_CLI_CODICE}" />

"Где GetVisualChild T

    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;
    }
4 голосов
/ 11 марта 2010

Я думаю, вам придется отслеживать события SelectionChanged, а затем форматировать элементы в определенном текстовом формате, а затем использовать метод Clipboard.SetText для установки элементов в буфер обмена.

http://msdn.microsoft.com/en-us/library/system.windows.clipboard.aspx

private void ListView_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
        foreach (var item in e.AddedItems.OfType<ListViewItem>())
        {
                Clipboard.SetText(item.ToString());
        }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...