2
我工作的一个更大的项目大气压,但我做了这个简单的例子告诉你什么是发生奇怪的行为..列表框选择时,有愚弄
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; }
}
}
列表框的ItemsSource设置为{}绑定..
当我启动应用程序时,我得到3个txt.Info对象显示,如果我点击其中任何一个,2或甚至所有的人都被选中。根据我的理解,问题依赖于列表框选择器无法区分这些项目,因此不知道我选择了哪一个。
这里是什么样子的照片..
我只点击了第二txt.Info项目。
我找到了一个解决方案,有人说我必须指定DisplayMemberPath,但是我不能在另一个项目中这样做,因为我有一个对象的数据模板。
上,我怎么能解决这个问题将是巨大的任何想法..
Thx提前。
编辑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 =“目标文件”
分配一个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,我还为每个对象创建了一个随机的int值,它们被添加到第二个列表中,但它仍然不起作用。 Atm我为Info对象创建了一些容器类(在这种情况下),所以我可以设置DisplayMemberPath。这并不好,所以我希望有更好的方法来解决这个问题。 –
Bogdan
2010-03-13 16:45:21
如果有,我从来没有找到它。我不是WPF列表框的大粉丝:( – Blindy 2010-03-13 16:56:34