繁体   English   中英

有重复时的ListBox选择器奇怪的行为

[英]ListBox selector odd behavior when there are dupes

我正在开发一个更大的项目atm,但是我举了一个简单的示例向您展示发生了什么。

using System.Collections.Generic;
using System.Windows;
namespace txt
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var obsLst = new List<Info> { new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" } };
            var temp = new List<Info>();
            for (var i = 1; i <= 3; i++)
            {
                temp.Add(obsLst[0]); //I add 3 of the same item from obsLst to temp
            }
            lst.DataContext = temp; //lst = ListBox
        }
    }
    public class Info
    {
        public string name { get; set; }
    }
}

ListBox ItemsSource设置为{Binding}。

启动应用程序时,我会显示3个txt.Info对象,如果单击其中的任何一个,也会选择2个甚至所有它们。 根据我的理解,问题在于列表框选择器无法区分项目,因此也不知道我选择了哪个项目。

这是它的外观图片。 替代文字

我只单击了第二个txt.Info项。

我找到了一个解决方案,有人说我必须指定DisplayMemberPath,但是我不能在其他项目中真正做到这一点,因为我有该对象的数据模板。

关于如何解决此问题的任何想法都很棒。

提前谢谢。

编辑1:这有效,但不是很好。

using System.Collections.Generic;
using System.Windows;

namespace txt
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var obsLst = new List<Info> { new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" } };
            var temp = new List<Container>();
            for (var i = 1; i <= 3; i++)
            {
                var t = new Container();
                t.obj = obsLst[0];
                temp.Add(t);
            }
            lst.DataContext = temp;
        }
    }
    public class Info
    {
        public string name { get; set; }
    }

    public class Container
    {
        public Info obj { get; set; }
    }
}

在这种情况下,您需要设置DisplayMemberPath =“ obj”

为该对象分配ID无效。

using System;
using System.Collections.Generic;
using System.Windows;

namespace txt
{
    public partial class MainWindow
    {
        public MainWindow()
        {
            InitializeComponent();
        }
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
            var rand = new Random();
            var obsLst = new List<Info> { new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" }, new Info { name = "asd" } };
            var temp = new List<Info>();
            for (var i = 1; i <= 3; i++)
            {
                obsLst[0].id = rand.Next(10000);
                temp.Add(obsLst[0]);
            }
            lst.DataContext = temp;
        }
    }
    public class Info
    {
        public string name { get; set; }
        public int id { get; set; }
    }
}

不久前我遇到了这个问题,我通过在项目中添加ID#来解决此问题,因此它们始终是不同的。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM