我有ObservableCollection和WPF ListBox相互绑定。添加ObservableCollection时,我希望在列表框中同时显示芯片位置。
<Window x:Class="Apeiron.ZoneSetter.ZoneSetterWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Height="765" Width="765">
<Grid>
<ListBox Name="lbPosList" ItemsSource="{Binding }" ></ListBox>
</Grid>
</Window>案例1)它工作得很好。当ObservableCollection被更改时,它会在ListBox上显示已老化的芯片pos。
public partial class ZoneSetterWindow : Window, INotifyPropertyChanged
{
public ZoneSetterWindow()
{
InitializeComponent();
lbChipList.DataContext = SelectedZoneChipList;
}
public void AddChip(ZoneMapChipInfo chip)
{
if (!m_SelectedChipDic.ContainsKey(chip.Point))
{
m_SelectedChipDic.Add(chip.ChipPos, chip);
m_selectedzonechiplist.Add(chip);
}
}
private Dictionary<Point, ZoneMapChipInfo> m_SelectedChipDic = new Dictionary<Point, ZoneMapChipInfo>();
private ObservableCollection<ZoneMapChipInfo> m_selectedzonechiplist = new ObservableCollection<ZoneMapChipInfo>();
public ObservableCollection<ZoneMapChipInfo> SelectedZoneChipList
{
get
{
return m_selectedzonechiplist;
}
}
}例2)它不起作用。尽管ObservableCollection被更改了,但它并没有显示出ListBox上的已老化的芯片pos。
public partial class ZoneSetterWindow : Window, INotifyPropertyChanged
{
public ZoneSetterWindow()
{
InitializeComponent();
lbChipList.DataContext = SelectedZoneChipList;
}
public void AddChip(ZoneMapChipInfo chip)
{
if (!m_SelectedChipDic.ContainsKey(chip.Point))
{
m_SelectedChipDic.Add(chip.ChipPos, chip);
m_selectedzonechiplist.Add(chip);
}
}
private Dictionary<Point, ZoneMapChipInfo> m_SelectedChipDic = new Dictionary<Point, ZoneMapChipInfo>();
private ObservableCollection<ZoneMapChipInfo> m_selectedzonechiplist = new ObservableCollection<ZoneMapChipInfo>();
public ObservableCollection<ZoneMapChipInfo> SelectedZoneChipList
{
get
{
ObservableCollection<WaferZoneMapChipInfo> result = new ObservableCollection<WaferZoneMapChipInfo>();
foreach (ZoneMapChipInfo info in m_SelectedChipDic.Values)
{
result.Add(info);
}
return result;
}
}
}我想始终同步m_SelectedChipDic和SelectedZoneChipList,并显示ChipPosition of SelectedZoneChipList at ListBox。
我不知道这两种情况有什么不同。
有没有人能理解我的上述问题。谢谢!!
发布于 2011-11-18 23:18:32
您的问题是,在第一种方法中,SelectedZoneChipList返回列表视图绑定到的m_selectedzonechiplist。这就是当您在列表中添加某些内容时,它正在更新UI的原因。在第二种方法中,SelectedZoneChipList返回一个与m_selectedzonechiplist无关的全新列表。因此,当您向m_selectedzonechiplist添加某些内容时,不会发生任何事情,因为ListBox绑定到一个完全不同的对象。
与ListBox的绑定大致如下所示:
DataContext。CollectionChanged更改的事件处理程序( ObservableCollection实现的)。Update:关于I want to synchronize m_SelectedChipDic and SelectedZoneChipList always:您可以摆脱ObservableCollection,使m_SelectedChipDic成为ObservableDictionary,并将ListView绑定到该ObservableDictionary。
https://stackoverflow.com/questions/8190035
复制相似问题