Ho una ListView:
myListView.ItemsSource = GetSomeData();
Se in uno degli articoli in GetSomeData()
uno dei campi sembra essere nullo, come posso visualizzarlo sulla GUI come qualcosa di simile "[Value isn"t known]"
senza dover verificare la nullità nel file "cs"? Esiste un modello speciale per valori nulli?
risposte:
2 per risposta № 1È possibile creare due DataTemplates: uno per gli articoli presenti e uno for null
S. È quindi possibile utilizzare a DataTemplateSelector per determinare quale modello deve essere usato per quale elemento, come in seguito (aggiusta le chiavi del modello ai tasti che usi):
public class MyTemplateSelector : DataTemplateSelector
{
public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
FrameworkElement element = (FrameworkElement)container;
if (item == null)
return (DataTemplate)element.FindResource("NullTemplate");
else
return (DataTemplate)element.FindResource("ItemTemplate");
}
}
Per utilizzarlo sul tuo ListView, aggiungi semplicemente
myListView.ItemTemplateSelector = new MyTemplateSelector();
In alto è l'approccio che raccomando, ma se davvero insisti a farlo solo in XAML, puoi provare l'approccio seguente:
<ListView.ItemTemplate>
<DataTemplate>
<ContentPresenter Content="{Binding}">
<ContentPresenter.Style>
<Style TargetType="ContentPresenter">
<Setter Property="ContentTemplate" Value="{StaticResource ItemTemplate}" />
<Style.Triggers>
<DataTrigger Binding="{Binding}" Value="{x:Null}">
<Setter Property="ContentTemplate" Value="{StaticResource NullTemplate}" />
</DataTrigger>
</Style.Triggers>
</Style>
</ContentPresenter.Style>
</ContentPresenter>
</DataTemplate>
</ListView.ItemTemplate>
Quello che ho fatto qui è aggiungere un altro ContentPresenter all'interno di ItemTemplate e utilizzare un trigger sul valore associato per determinare quale modello effettivo dovrebbe essere usato.