В ListBox
у меня есть свойство ItemContainer IsSelected
, связанное с моим свойством ViewModel IsSelected
с использованием синтаксиса <ListBox.ItemContainerStyle>
.
Он отлично работает, но я получаю предупреждение Resharper:
Невозможно разрешить свойство "IsSelected" в контексте данных типа "FooSolution.BarViewModel".
Как я могу указать тип DataContext в ListBox ItemContainer, чтобы избавиться от этого предупреждения?
Вот код. У меня есть класс BarViewModel
:
public ObservableCollection<FooViewModel> FooItems { get;set; }
BarViewModel
назначается DataContext в элементе управления, который содержит ListBox
и FooViewModel
следующим образом:
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected == value)
{
return;
}
isSelected = value;
RaisePropertyChanged(() => IsSelected);
}
}
и XAML:
<ListBox ItemsSource="{Binding FooItems}" SelectionMode="Multiple">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Обновление
Я попытался установить d:DataContext
с помощью setter, как это было предложено HighCore, но, к сожалению, это не помогает и даже разбивает сборку:
<Setter Property="d:DataContext" Value="{d:DesignInstance yourxmlns:yourItemViewModelClass}"/>
(Throws: Error 1 Тег 'DesignInstance' не существует в пространстве имен XML 'schemas.microsoft.com/expression/blend/2008';. Строка 31 Позиция 50.)
Обновление 2
Окончательно, решение состоит в том, чтобы установить d:DataContext
на сам элемент стиля (см. Мой ответ ниже):
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" d:DataContext="{d:DesignInstance local:FooViewModel }">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>