将项目从列表框移动到列表框

将项目从列表框移动到列表框

本文介绍了将项目从列表框移动到列表框的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我遇到过很多文章,介绍如何将项目从一个列表框移动到另一个列表框。我已经将建议的代码应用到我的项目中,但是所有这些示例都否定了listbox1是数据绑定的事实AS列表框2由先前存储的数据填充,因为UI中有两个绑定的列表框。我已经尝试了ObservableCollections,ArrayList'和现在的Lists< t> ...都具有相同的最终结果。有任何关于如何执行此操作的建议,因为当应用示例代码时出现以下错误当ItemsSource正在使用时,操作无效。请使用ItemsControl.ItemsSource访问和修改元素。



PS。我也试图通过使用datatemplate将listbox2溢出到多个列中。



问候史蒂文



代码如下:



cs -

I''ve come across numerous articles describing how to move items from one listbox to another. I''ve applied suggested code to my project but all these examples negate the fact that listbox1 is databound AS WELL AS listbox2 being populated by previously stored data as in there are two bound listboxes in the UI. I''ve tried ObservableCollections, ArrayList''s and now Lists<t>... all with the same end result. Has anyone any advice on how to do this as I get the following error when example code is applied "Operation is not valid while ItemsSource is in use. Access and modify elements with ItemsControl.ItemsSource instead."

PS. Im also trying to have listbox2 spill over into multiple columns by use of datatemplate.

Regards Steven

Code as follows:

cs -

using System;
using System.Windows;
using System.Windows.Input;
using System.Windows.Controls;
using System.Data;
using System.Data.SQLite;
using System.Collections;
using System.Collections.ObjectModel;
using System.Collections.Generic;
using PTWS.Class_Lib;

using System.ComponentModel;
using System.Windows.Data;
using System.Windows.Media;


namespace PTWS.MainPanelControls.FormControls.Permits
{
    /// <summary>
    /// Interaction logic for ColdWorkDraftUControl.xaml
    /// </summary>
    public partial class ColdWorkDraftUControl : UserControl
    {
        PTWDatabase db = new PTWDatabase();

        private ObservableCollection<CertificateLookup> CertificateLookupList = new ObservableCollection<CertificateLookup>();

        public ColdWorkDraftUControl()
        {
            InitializeComponent();

            LoadDataCertificateLookup();
// all works great untill I uncomment the next line
            //LoadDataCertificateSelected();
        }

        private void LoadDataCertificateLookup()
        {
            try
            {
                DataTable conditions;
                String query = "select lc.Section \"Section\""
                    + ", lc.Description \"Description\""
                    + ", lc.SortOrder \"SortOrder\" "
                    + "from LookupConditions lc "
                    + "where not exists (select 1 from SelectedConditions sc where sc.Code = lc.Code and sc.PermitID = ''CWP-12-00001'') "
                    + "and lc.Section = ''Certificates''";

                    conditions = db.GetDataTable(query);

                foreach (DataRow r in conditions.Rows)
                {
                    CertificateLookupList.Add(new CertificateLookup()
                    {
                        Section = r["Section"].ToString(),
                        Description = r["Description"].ToString(),
                        SortOrder = r["SortOrder"].ToString()
                    });
                }

               listBoxCertificateLookup.ItemsSource = CertificateLookupList;
            }
            catch (Exception fail)
            {
                String error = "The following error has occurred:\n\n";
                error += fail.Message.ToString() + "\n\n";
                MessageBox.Show(error);
            }
        }

        void LoadDataCertificateSelected()
        {
            try
            {
                DataTable conditions;
                String query = "select Section \"Section\""
                    + ", Description \"Description\""
                    + ", SortOrder \"SortOrder\"";
                query += "from SelectedConditions where PermitID = ''CWP-12-00001'' and Section = ''Certificates''";
                conditions = db.GetDataTable(query);

                ObservableCollection<CertificateSelected> CertificateSelectedList = new ObservableCollection<CertificateSelected>();

                foreach (DataRow r in conditions.Rows)
                {
                    CertificateSelectedList.Add(new CertificateSelected()
                    {
                        selectedSection = r["Section"].ToString(),
                        selectedDescription = r["Description"].ToString(),
                        selectedSortOrder = r["SortOrder"].ToString()
                    });
                }
                listBoxCertificateSelected.ItemsSource = CertificateSelectedList;
            }
            catch (Exception fail)
            {
                String error = "The following error has occurred:\n\n";
                error += fail.Message.ToString() + "\n\n";
                MessageBox.Show(error);
            }
        }

        private void listBoxCertificateLookup_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                ListBoxItem myListBoxItem =
                    (ListBoxItem)(listBoxCertificateLookup.ItemContainerGenerator.ContainerFromItem(listBoxCertificateLookup.Items.CurrentItem));
                // listBoxCertificateSelected.DataContext = null;
                listBoxCertificateSelected.Items.Add(myListBoxItem);
            }
            catch (Exception fail)
            {
                String error = "The following error has occurred:\n\n";
                error += fail.Message.ToString() + "\n\n";
                MessageBox.Show(error);
            }
        }

        private void listBoxCertificateSelected_MouseDoubleClick(object sender, MouseButtonEventArgs e)
        {
            try
            {
                ListBoxItem myListBoxItem =
                    (ListBoxItem)(listBoxCertificateSelected.ItemContainerGenerator.ContainerFromItem(listBoxCertificateSelected.Items.CurrentItem));

                //listBoxCertificateLookup.DataContext = null;
                listBoxCertificateLookup.Items.Add(myListBoxItem);
            }
            catch (Exception fail)
            {
                String error = "The following error has occurred:\n\n";
                error += fail.Message.ToString() + "\n\n";
                MessageBox.Show(error);
            }
        }
    }
}





xaml -



xaml-

<UserControl x:Class="PTWS.MainPanelControls.FormControls.Permits.ColdWorkDraftUControl"
             xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
             xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
             xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
             xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
             mc:Ignorable="d"
             d:DesignHeight="300" d:DesignWidth="300">

    <Grid>
        <ListBox Name="listBoxCertificateLookup"
                 ItemsSource="{Binding}"
                 MouseDoubleClick="listBoxCertificateLookup_MouseDoubleClick"
                 IsSynchronizedWithCurrentItem="True"
                 HorizontalAlignment="Left" Width="300" Height="75" VerticalAlignment="Top" >
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Height="23" Orientation="Horizontal">
                        <TextBlock Text="{Binding Path=Description}" VerticalAlignment="Top" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel IsItemsHost="True" Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

        <ListBox Name="listBoxCertificateSelected"
                 ItemsSource="{Binding}"
                 MouseDoubleClick="listBoxCertificateSelected_MouseDoubleClick"
                 HorizontalAlignment="Left" Width="300" Height="75" VerticalAlignment="Top" Margin="0,153,0,0">
            <ListBox.ItemTemplate>
                <DataTemplate>
                    <StackPanel Height="23" Orientation="Horizontal">
                    <TextBlock Name="textBlock" Text="{Binding Path=selectedDescription}" VerticalAlignment="Top" />
                    </StackPanel>
                </DataTemplate>
            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel IsItemsHost="True" Orientation="Vertical" />
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>
    </Grid>
</UserControl>





上课 -



class-

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace PTWS.Class_Lib
{
    class CertificateLookup
    {
        public string Section { get; set; }
        public string Description {get; set;}
        public string SortOrder { get; set; }
        public string selectedSection { get; set; }
        public string selectedDescription { get; set; }
        public string selectedSortOrder { get; set; }
    }
}





解决方案

修改后的CS文件。 ..MouseDoubleClick事件代码更改(相应地对LB2进行适当的更改)




Solution
AMENDED CS File...MouseDoubleClick event code changes (make appropriate changes to LB2 accordingly)

CertificateLookup myListBoxItem = (CertificateLookup)((ListBox)sender).SelectedItem;

CertificateSelectedList.Add(new CertificateSelected()
{
selectedDescription = myListBoxItem.Description
});

CertificateLookupList.Remove(myListBoxItem);

推荐答案

<ListBox ItemsSource="{Binding Path=myCollection}" />



将列表绑定到列表框。您可以将相同的列表绑定到多个列表框。



您还可以查看 []



问候

Espen Harlinn


to bind the list to the listbox. You can bind the same list to multiple listboxes.

You can also have a look at DataBinding in WPF[^]

Regards
Espen Harlinn



这篇关于将项目从列表框移动到列表框的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持!

08-14 19:28