WP8 LongListSelector SelectedItem не привязывается
В WP8 они забыли предоставить SelectedItem в качестве свойства зависимостей, поэтому я не могу привязаться к нему. Я исправил это, используя это: http://dotnet-redzone.blogspot.com/2012/11/windows-phone-8longlistselector.html
При этом я замечаю, что не могу сбросить свойство из ViewModel, т. Е. Если я установлю элемент равным нулю в ViewModel, это не повлияет на пользовательский интерфейс. Я уже предоставил двухстороннюю привязку в пользовательском интерфейсе, но все еще установка нулевого элемента в ViewModel не изменяет выбранный элемент в LongListSelector. Я также не хочу использовать событие SelectionChanged, так как я делюсь ViewModel между приложением WP7.5 и приложением WP8, поэтому я хочу вытолкнуть как можно больше в ViewModel. Есть ли решение для этого?
2 ответа
Похоже, что используемый вами класс LongListSelector не обрабатывает сеттер должным образом.
Замените обратный вызов OnSelectedItemChanged следующим текстом:
private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var selector = (LongListSelector)d;
selector.SetSelectedItem(e);
}
private void SetSelectedItem(DependencyPropertyChangedEventArgs e)
{
base.SelectedItem = e.NewValue;
}
И есть полная версия этих двух частей:
public class LongListSelector : Microsoft.Phone.Controls.LongListSelector
{
public LongListSelector()
{
SelectionChanged += LongListSelector_SelectionChanged;
}
void LongListSelector_SelectionChanged(object sender, SelectionChangedEventArgs e)
{
SelectedItem = base.SelectedItem;
}
public static readonly DependencyProperty SelectedItemProperty =
DependencyProperty.Register(
"SelectedItem",
typeof(object),
typeof(LongListSelector),
new PropertyMetadata(null, OnSelectedItemChanged)
);
private static void OnSelectedItemChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var selector = (LongListSelector)d;
selector.SetSelectedItem(e);
}
private void SetSelectedItem(DependencyPropertyChangedEventArgs e)
{
base.SelectedItem = e.NewValue;
}
public new object SelectedItem
{
get { return GetValue(SelectedItemProperty); }
set { SetValue(SelectedItemProperty, value); }
}
}