/ / Esiste un modello o sintassi speciale per i valori nulli in ListView? - c #, wpf

Esiste un modello o sintassi speciale per i valori nulli in ListView? - c #, wpf

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 nullS. È 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.