WPF:ListBox中的ComboBox和并发

时间:2010-08-03 13:59:02

标签: wpf data-binding

我有这样的代码:

<ListBox ItemsSource="{Binding}">
   <ListBox.ItemTemplate>
      <DataTemplate>
          <StackPanel>
              <TextBlock>Some Other Stuff Here</TextBlock>
              <ComboBox ItemsSource="{Binding}" />
          </StackPanel>
      </DataTemplate>
   </ListBox.ItemTemplate>
</ListBox>

问题是,每次外部ListBox.SelectedItem发生更改时,其中的ComboBox都会将其SelectedIndex更改为-1。这意味着如果我点击“其他东西在这里”(除非它所在的ListBoxItem被选中),所有组合框的选择都会被清除。

我如何克服这个问题? THX!

1 个答案:

答案 0 :(得分:0)

大概你的组合框绑定到像ObservableCollection这样的东西 - 尝试公开ICollectionView的实例:

class DataSource
{
    // ...

    public ObservableCollection<string> MyData { get; private set; }
    public ICollectionView MyDataView
    {
        get
        {
            return CollectionViewSource.GetDefaultView(this.MyData);
        }
    }
}

然后你可以用你的组合框绑定:

<ComboBox ItemsSource="{Binding MyDataView}" IsSynchronizedWithCurrentItem="True" />

这意味着每个数据源的“选定项目”存储在ICollectionView对象中,而不是存储在组合框中,这应该意味着它在ListBox SelectedItem更改时保持不变