我正在构建一个 WPF 应用程序(.NET 4.0),我有以下情况:
<ListBox
ItemsSource="{Binding Path=Items}"
SelectedItem="{Binding Path=SelectedItem}">
<ListBox.ItemContainerStyle>
<Style TargetType="ListBoxItem">
<Setter Property="Height" Value="48"/>
</Style>
</ListBox.ItemContainerStyle>
<ListBox.ItemTemplate>
<DataTemplate>
<DockPanel>
<!-- ... -->
<CheckBox>
<CheckBox.IsChecked>
<!-- Something here that behaves like SelectedItem binding -->
</CheckBox.IsChecked>
</CheckBox>
</DockPanel>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
- ListBox 的 ItemSource 绑定到 ObservableCollection<>。
- ListBox 的 SelectedItem 绑定到 ViewModel 的 SelectedItem 属性。
但是,当 ViewModel.SelectedItem 更新时,会启动一些长时间运行(2-3 秒)的异步任务。通过简单地选择列表框中的不同项目来排队大量异步任务太容易了,所以我正在研究将 ViewModel.SelectedItem 绑定到 CheckBox(包含在 ItemTemplate 中)。
我对 WPF 相当陌生,但是在表单中我会附加一个事件处理程序并编写一些长而丑陋的代码来取消检查除触发事件的项目之外的所有项目,然后以编程方式更新属性。
在 WPF 中,我希望有一些更好的解决方案,我已经研究过使用 ValueConverter,但我不知道如何绑定到父 View-Model(具有 ObservableCollection<>)。
如果有人遇到过类似的要求,我真的很感激一些指点。
干杯!
./弗雷德里克