У меня есть вопрос относительно LongListMultiSelector в наборе инструментов Windows Phone 8.WP8 LongListMultiSelector Binding SelectedItems
Я хочу использовать этот элемент управления для реализации файлового браузера в WP8 (с использованием MVVM). Поскольку свойство SelectedItems не является связующим, я использовал решение этой статьи, чтобы исправить это. 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); }
}
}
VIEW МОДЕЛЬ
/// <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.SelectFiles, ref_selectedFiles, value); из пакета Mvvmlight (Laurent Bugnion).
вы пробовали это ваш ViewModel будет реализует INotifyPropertyChanged и в инкубаторе положить NotifyPropertyChanged («SelectedFiles»); –
My ViewModel наследует от BaseViewModel, который унаследован от ObservableObject из пакета Mvvmlight. Используя метод Set (...), он должен позаботиться о том, что я думаю. Он работает для других свойств как минимум. Но я должен признать, что это первый раз, когда я использую ObservableCollection, поэтому, возможно, это нужно обрабатывать по-разному. Я посмотрю, спасибо. –
Здесь, похоже, не проблема. Я могу редактировать коллекцию и обновления графического интерфейса и наоборот. –