Ho lottato con questo codice da un po 'di tempo e non riesco a trovare nessuna risposta completa alla mia domanda. Ho creato un piccolo esempio per illustrare il problema:L'attributo di binding delle condizioni non funziona?
<ListView >
<ListView.ItemsPanel>
<ItemsPanelTemplate>
<StackPanel Margin="0,0,20,0" IsItemsHost="True" />
</ItemsPanelTemplate>
</ListView.ItemsPanel>
<ListView.Items>
<TextBlock>Test1</TextBlock>
<TextBlock>Test2</TextBlock>
<TextBlock>Test3</TextBlock>
<TextBlock>Test4</TextBlock>
<TextBlock>Test5</TextBlock>
</ListView.Items>
<ListView.ItemContainerStyle>
<Style TargetType="{x:Type ListViewItem}">
<Setter Property="Template">
<Setter.Value>
<ControlTemplate TargetType="{x:Type ListViewItem}">
<Grid>
<ContentPresenter/>
</Grid>
<ControlTemplate.Triggers>
<MultiTrigger>
<MultiTrigger.Conditions>
<Condition Binding="{Binding RelativeSource={RelativeSource Self}, Path=IsMouseOver}" Value="True" />
<Condition Property="IsSelected" Value="True"/>
</MultiTrigger.Conditions>
<Setter Property="Visibility" Value="Collapsed"/>
</MultiTrigger>
</ControlTemplate.Triggers>
</ControlTemplate>
</Setter.Value>
</Setter>
</Style>
</ListView.ItemContainerStyle>
</ListView>
Secondo le impostazioni MultiTrigger, l'elemento selezionato dovrebbe riapparire quando il mouse non è più sopra l'elemento selezionato. Questo codice, tuttavia, produce una InvalidOperationException con il messaggio "Deve avere valore non nullo per 'Proprietà'." Se si rimuove la condizione che utilizza l'attributo "Binding", l'eccezione non viene generata. Nella documentazione MSDN, afferma che è necessario avere l'attributo Property o Binding. Il codice sopra funziona come l'attributo Binding non è impostato. In effetti, in tutti i miei casi di test, non importa quale sia l'attributo Binding impostato; l'eccezione è ancora generata. qualche idea?
+1 per l'ammissione di boneheadedness e fornendo una soluzione. Qualcun altro si imbatterà in questo. Manca la parola "Dati" è abbastanza facile da trascurare. –
+1 Per avermi condotto alla soluzione molto più rapidamente rispetto alla ricerca e alla lettura della documentazione. L'errore avrebbe dovuto spiegare questo invece di fare affidamento sulla documentazione. – jpierson
+1 Ho appena fatto la stessa mossa con la testa di osso. Il tuo post probabilmente mi ha salvato un'ora. –