谢谢MSDN 论坛中的 YossiStarz https://social.msdn.microsoft.com/Forums/windowsapps/en-US/0304cdb4-320c-420f-8bcb-3e2d2367b1d9/binding-selecteditems-in-listview-to-a-viewmodel-in-windows-phone-81?forum=wpdevelop#dd8c2c79-4190-4cfb-943a-b50093cfb72b,我设法解决了我的问题。所以这是他的解决方案:
问题是您无法在元素上使用 Style 来 SetBinding
你把风格穿上了。这是因为样式创建一次
当创建列表视图时,而不是为每个项目容器创建。
您实际上所做的是创建一个具有设置器的样式对象
对象的 Value 属性绑定到 IsSelected
Style 父级的 DataContext(但它没有)。这个绑定
发生在 setter 中设置 Value 属性的值。如果它
将成功获得价值,这就是它要设置的价值
所有物品容器。
我有一个解决方案给你。
第一的
最简单的是,创建这个辅助类:
public class Helper {
public static string GetIsSelectedContainerBinding(DependencyObject obj) {
return (string)obj.GetValue(IsSelectedContainerBindingProperty);
}
public static void SetIsSelectedContainerBinding(DependencyObject obj, string value) {
obj.SetValue(IsSelectedContainerBindingProperty, value);
}
// Using a DependencyProperty as the backing store for IsSelectedContainerBinding. This enables animation, styling, binding, etc...
public static readonly DependencyProperty IsSelectedContainerBindingProperty =
DependencyProperty.RegisterAttached("IsSelectedContainerBinding", typeof(string), typeof(helper), new PropertyMetadata(null, IsSelectedContainerBindingPropertyChangedCallback));
public static void IsSelectedContainerBindingPropertyChangedCallback(DependencyObject d, DependencyPropertyChangedEventArgs e) {
BindingOperations.SetBinding(d, ListViewItem.IsSelectedProperty, new Binding() {
Source = d,
Path = new PropertyPath("Content." + e.NewValue),
Mode = BindingMode.TwoWay
});
}
}
现在将设置器更改为如下所示:
<Style TargetType="ListViewItem">
<Setter Property="local:Helper.IsSelectedContainerBinding" Value="IsSelected"/>
</Style>
这应该将 SetBinding 应用于创建的每个容器。