以编程方式在每行加载时添加两个按钮

本文关键字:按钮 两个 添加 方式 编程 加载 | 更新日期: 2023-09-27 18:13:50

我在一个新的WPF窗口中创建了一个ListView,也创建了一个函数,该函数在被调用时填充ListView。这个函数只是获取我存储数据的web服务器的URL,增加"id"并获取数据并将其存储在ListView中。因此,它用一定数量的项目填充ListView。

我面临的问题是,我想添加两个按钮,ON &在以编程方式填充每个ListView项时,将其设置为OFF。例如,如果添加了16个项目,我希望为每个项目设置2个按钮,如果添加了12个项目,则使用类似的程序。下面是我的代码:

namespace user_login
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        Window1 W = new Window1();
        public MainWindow()
        {
            InitializeComponent();    
        }
        public void populate()
        {
            int i;
            int num = 16;
            for (i = 1; i <= num; i++)
            {
                string val = Convert.ToString(i);
                string currentUrl = "http://xpleria.com/devices.php?query=dev&id=";
                string newUrlWithChangedSort = ReplaceQueryStringParam(currentUrl, "id", val);
                string result = getcontent(newUrlWithChangedSort);    
                W.list1.Items.Add(result);
            }
        }
        public string getcontent(string URL)
        {
            string content = "";
            // Get HTML data
            WebClient client = new WebClient();
            try
            {
                content = client.DownloadString(URL);
            }
            catch (Exception)
            {
                System.Windows.Forms.MessageBox.Show("No Connection detected!!!");
            }
            return content;
        }
        public static string ReplaceQueryStringParam(string currentPageUrl, string paramToReplace, string newValue)
        {
            string urlWithoutQuery = currentPageUrl.IndexOf('?') >= 0
                ? currentPageUrl.Substring(0, currentPageUrl.IndexOf('?'))
                : currentPageUrl;
            string queryString = currentPageUrl.IndexOf('?') >= 0
                ? currentPageUrl.Substring(currentPageUrl.IndexOf('?'))
                : null;
            var queryParamList = queryString != null
                ? HttpUtility.ParseQueryString(queryString)
                : HttpUtility.ParseQueryString(string.Empty);
            if (queryParamList[paramToReplace] != null)
            {
                queryParamList[paramToReplace] = newValue;
            }
            else
            {
                queryParamList.Add(paramToReplace, newValue);
            }
            return String.Format("{0}?{1}", urlWithoutQuery, queryParamList);
        }
        private void Button_Click_1(object sender, RoutedEventArgs e)
        {
            string user = textbox1.Text;
            string password = textbox2.Password;
            string currentUrl = "http://xpleria.com/login.php?query=login&user=wcam&pass=wireless";
            string newUrlWithChangedSort = ReplaceQueryStringParam(currentUrl, "user", user);
            string newUrl = newUrlWithChangedSort;
            string FinalUrl = ReplaceQueryStringParam(newUrl, "pass", password);
            string result= getcontent(FinalUrl);
            string value = result.Substring(0, 8);
            string invalid = "xpleria0";
            string valid = "xpleria1";
            if (value.Equals(invalid))
            {
                System.Windows.MessageBox.Show("The Username and/or Password you have entered is invalid, please try again");
            }
            else if (value.Equals(valid))
            {
                string sessionID = result.Substring(8, 32);
                System.Windows.MessageBox.Show("HI, WELCOME CLETA");
                this.Close();
                using (new user_login.loading.PleaseWait(this.Location))
                {
                    W.Show();
                    populate();
                }
            }
        }
        public System.Drawing.Point Location { get; set; }
    }
}

以编程方式在每行加载时添加两个按钮

我建议您退后一步,开始认真考虑如何组织代码。我知道这不是你问的问题的答案,但它你应该问的问题的答案。

首先,所有与从URL中检索这些项相关的代码都应该移到某种类中。这个类应该接受URL字符串作为构造函数参数,并收集所有适当的数据。然后,您应该创建另一个类,用它填充每个单独项目的数据,然后公开此列表。完成后,窗口中的代码应该比以下代码复杂一点:

var ItemsGetter = new ItemsGetter(URL);
foreach(var Item in ItemsGetter.Items)
{
    // Populate the ListView
}

一旦你完成了,我建议你创建一个UserControl。用户控件在需要表示动态数量的数据实体的情况下非常有用,每个数据实体都有自己的一组控件,允许在每个数据实体上执行操作。您应该创建一个带有标签和两个所需按钮的UserControl。UserControl的构造函数应该期望使用您创建的数据类型的参数来表示每个类。从这里,您可以让按钮根据需要对数据类型进行操作。

最后,您可能需要一种方法让UserControl与Window交互。比如你的一个按钮是"删除"。您可能希望该项目在操作完成后从列表中消失。不要试图通过将控件作为参数或其他东西传递来将控件与Window绑定在一起。相反,阅读Action事件,并学习如何在用户控件上创建一个事件,当你填充列表视图时,在窗口的foreach循环中绑定。当UserControl完成由按钮触发的删除操作时,你可以引发UserControl的事件,这将提示窗口从列表视图中删除控件。

最后,命名你的控件