我对Windows Phone 8工具包中的LongListMultiSelector有疑问。

我想使用此控件在WP8中实现文件浏览器(使用MVVM)。由于SelectedItems属性不可绑定(bind),因此我使用了本文中的解决方案来解决此问题。
http://dotnet-redzone.blogspot.de/2012/11/windows-phone-8longlistselector.html

这是我的相关代码:
XAML

 <Grid DataContext="{Binding FileBrowserViewModel}">
    <local:LongListMultiSelector
                    x:Name="FileList"
                    ItemsSource ="{Binding CurrentFileList}"
                    EnforceIsSelectionEnabled="{Binding IsInSelectionMode}"
                    toolkit:TiltEffect.IsTiltEnabled="True"
                    SelectedItems="{Binding SelectedFiles, Mode=TwoWay}"
                    IsSelectionEnabled="True"/>

 </Grid>

我的LonglistMultiSelector
public class LongListMultiSelector : Microsoft.Phone.Controls.LongListMultiSelector
{
    public LongListMultiSelector()
    {
        SelectionChanged += LongListMultiSelector_SelectionChanged;
    }

    void LongListMultiSelector_SelectionChanged(object sender, System.Windows.Controls.SelectionChangedEventArgs e)
    {
        this.SelectedItems = base.SelectedItems;
    }

    public static readonly DependencyProperty SelectedItemsProperty =
        DependencyProperty.Register(
            "SelectedItems",
            typeof(object),
            typeof(LongListMultiSelector),
            new PropertyMetadata(null, OnSelectedItemsChanged)
        );

    private static void OnSelectedItemsChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
    {
        var selector = (LongListMultiSelector) d;
        selector.SelectedItems = e.NewValue;
    }

    public new object SelectedItems
    {
        get { return GetValue(SelectedItemsProperty); }
        set { SetValue(SelectedItemsProperty, value); }
    }
}

查看模型
/// <summary>
/// The currently selected Items.
/// </summary>
public ObservableCollection<File> SelectedFiles
{
    get { return _selectedFiles; }
    set { Set(() => this.SelectedFiles, ref _selectedFiles, value); }
}
private ObservableCollection<File> _selectedFiles;

但是此解决方案不起作用。 SelectedFiles属性完全不变。 (_selectedFiles始终为空)
  • 编辑:Set(()=> this.SelectedFiles,ref _selectedFiles,value);来自Mvvmlight(Laurent Bugnion)软件包。
  • 最佳答案

    我使用普通的LongListSelector并为其中的每个Item设置了 bool IsSelected,从而解决了我的问题。

    然后,DataTemplate具有一个如下所示的复选框:

    <CheckBox IsChecked="{Binding IsSelected, Converter={StaticResource BooleanToVisibilityConverter}}"/>
    

    10-06 10:16