我正在开发一个更大的项目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; }
}
}
答案 0 :(得分:1)
我之前有过这个问题,我通过在项目中添加id#来修复它,所以它们总是不同。