In un ListBox
Ho proprietà di un ItemContainer IsSelected
legato alla proprietà di mio ViewModel IsSelected
utilizzando <ListBox.ItemContainerStyle>
sintassi.Specificare DataContext tipo sulla casella di riepilogo ItemContainer in stile
Funziona benissimo, ma ottengo un avvertimento ReSharper:
Cannot resolve property 'IsSelected' in data context of type "FooSolution.BarViewModel".
Come faccio a specificare specificare DataContext tipo sulla ListBox ItemContainer per sbarazzarsi di questo avviso?
Ecco il codice. Ho una classe BarViewModel
:
public ObservableCollection<FooViewModel> FooItems { get;set; }
BarViewModel
è assegnato al DataContext nel controllo che contiene il ListBox
e FooViewModel
come segue:
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected == value)
{
return;
}
isSelected = value;
RaisePropertyChanged(() => IsSelected);
}
}
e XAML come questo:
<ListBox ItemsSource="{Binding FooItems}" SelectionMode="Multiple">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Aggiornamento Ho provato a installare d:DataContext
usando un setter, come suggerito da HighCore, ma sfortunatamente, non aiuta e anche rompe la compilazione:
<Setter Property="d:DataContext" Value="{d:DesignInstance yourxmlns:yourItemViewModelClass}"/>
(Produce: Errore 1 Il tag 'DesignInstance' non esiste nello spazio dei nomi XML 'schemas.microsoft.com/expression/blend/2008' ;. Linea 31 posizione 50.)
Update 2 Finaly, la soluzione è quella di impostare d:DataContext
sull'elemento stile stesso (vedi la mia risposta sotto):
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}" d:DataContext="{d:DesignInstance local:FooViewModel }">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
+1 entrambi abbiamo imparato qualcosa oggi =) –
Viene visualizzato il seguente errore: Proprietà 'DataContext' non è collegabile agli elementi di tipo 'Stile'. ¿? ¿? ¿ –
@somos, sei sicuro, stai usando d: DataContext da blend SDK (questo è un puntello speciale per consentire al progettista di conoscere il tipo di VM in fase di progettazione) – Isantipov