Этот XAML будет делать нечто подобное, он имеет видимый ListView, показывающий список и скрытое сообщение, и переключает видимость, когда список пуст с помощью триггера.
Приведенный ниже код будет работать с любым IList или ICollection, но ту же технику можно использовать с любым источником данных, как всегда, если вы хотите, чтобы дисплей обновлялся при добавлении или удалении элементов, вам необходимо использовать ObservableCollection или аналогичный.
ContentPresenter присутствует, потому что вы можете использовать триггеры только внутри шаблона или стиля, поэтому мы помещаем наши элементы управления в DataTemplate и используем ContentPresenter для его отображения.
Если вы хотите, чтобы сообщение появлялось внутри ListView, все, что вам нужно сделать, - это удалить Setter, который скрывает ListView, и добавить некоторое поле в TextBlock, чтобы расположить его там, где должен быть первый элемент в ListVIew.
<ContentPresenter Content="{Binding}">
<ContentPresenter.ContentTemplate>
<DataTemplate>
<Grid>
<ListView Name="list" ItemsSource="{Binding MyList}"/>
<TextBlock Name="empty" Text="No items found" Visibility="Collapsed"/>
</Grid>
<DataTemplate.Triggers>
<DataTrigger Binding="{Binding MyList.Count}" Value="0">
<Setter TargetName="list" Property="Visibility" Value="Collapsed"/>
<Setter TargetName="empty" Property="Visibility" Value="Visible"/>
</DataTrigger>
</DataTemplate.Triggers>
</DataTemplate>
</ContentPresenter.ContentTemplate>
</ContentPresenter>