Использование ListBoxItemExtensions.IsSelected из WinRt Xaml Toolkit не работает Двухстороннее связывание

В Windows RT App (C#) с WinRt Xaml Toolkit я использую это:

<ListBox ItemsSource="{Binding Path=FilterBaseFields}" SelectionMode="Multiple">
            <ListBox.ItemTemplate >
                <DataTemplate  >
                    <TextBox Text="{Binding Path=Key, Mode=TwoWay}" 
                  extensions:ListBoxItemExtensions.IsSelected="{Binding Path=IsSelected, Mode=TwoWay}"/>
                </DataTemplate>
            </ListBox.ItemTemplate>
        </ListBox>

Для текста TwoWay Binding отлично работает, но для расширений:ListBoxItemExtensions.IsSelected - не работает (работает только из источника для просмотра).
Есть идеи?

1 ответ

Решение

Я спросил, что это уже обсуждается в WinRT XAML Toolkit, и автор этого набора Филипп Скакун ответил:

Вот так. Кажется, это ограничение этого свойства. Нам нужно создать другой для поддержки двухстороннего связывания. Что-то вроде свойства "IsSelectedBinding", используя шаблон, который я описал здесь: http://blog.onedevjob.com/2011/10/26/workaround-for-binding-not-supported-on-stylesettervalue-in-silverlight/ Может быть, когда Я получу шанс, что добавлю это в инструментарий.

И я решаю свою проблему с помощью ответа Clemens.

Это выглядит как:

public class MyListBox : ListBox
{
    protected override void PrepareContainerForItemOverride(
        DependencyObject element, object item)
    {
        base.PrepareContainerForItemOverride(element, item);

        if (item is Item)
        {
            var binding = new Binding
            {
                Source = item,
                Path = new PropertyPath("IsSelected"),
                Mode = BindingMode.TwoWay
            };

            ((ListBoxItem)element).SetBinding(ListBoxItem.IsSelectedProperty, binding);
        }
    }
}
Другие вопросы по тегам