Xaml 在UWP中ListView(嵌套在模板中)为空时显示消息

Xaml 在UWP中ListView(嵌套在模板中)为空时显示消息,xaml,mvvm,uwp,uwp-xaml,master-detail,Xaml,Mvvm,Uwp,Uwp Xaml,Master Detail,我正在为我的应用程序使用控件。它提供了一种在未选择任何项目时自定义详细信息面板的方法,但没有提供在没有项目可用时自定义主面板的方法 基本上,我想要完成的是显示一条消息(TextBlock),而不是默认的ListView,当后者没有项目时 我就是不能让它工作。我猜ListView嵌套在定义MasterDetailsView控件的ControlTemplate中 我静态地(在运行时没有任何更新)完成此操作的唯一方法是覆盖MasterDetailsView.Resources,其中我为ListView

我正在为我的应用程序使用控件。它提供了一种在未选择任何项目时自定义详细信息面板的方法,但没有提供在没有项目可用时自定义主面板的方法

基本上,我想要完成的是显示一条消息(
TextBlock
),而不是默认的
ListView
,当后者没有项目时

我就是不能让它工作。我猜
ListView
嵌套在定义
MasterDetailsView
控件的
ControlTemplate

我静态地(在运行时没有任何更新)完成此操作的唯一方法是覆盖
MasterDetailsView.Resources
,其中我为
ListView
添加了一个
Controltemplate
,如下标记所示:

<Page
    ...
    xmlns:controls="using:Microsoft.Toolkit.Uwp.UI.Controls
    ...>

    <controls:MasterDetailsView.Resources>
        <Style TargetType="ListView" >
            <Setter Property="Template" >
                <Setter.Value>
                    <ControlTemplate TargetType="ListView">
                        <Grid>
                            <TextBlock
                                HorizontalAlignment="Center"
                                VerticalAlignment="Center"
                                Style="{StaticResource SubtitleTextBlockStyle}"
                                TextAlignment="Center"
                                Text="No content"/>
                        </Grid>
                    </ControlTemplate>
                </Setter.Value>
            </Setter>
        </Style>
    </controls:MasterDetailsView.Resources>
Obs:
ViewModel
MyMasterDetailsView
的一个属性,它有一个名为
SampleItems
observeCollection
,它从不为
null

我还试图通过使用
DataTriggerBehavior
ChangePropertyAction
(来自Microsoft.Xaml.Interactions.Core)来解决这个问题,但也没有任何运气。我也不确定我做的是否正确

如果有人可以回答我,如果这是与
MasterDetailsView
控制,我将不胜感激。或者举一个例子,说明我是如何使用上面的一种方法,甚至是另一种方法来实现这一点的


致以最良好的祝愿

应该注意,绑定集合的
计数
无法动态更改状态。虽然确实修改了
Count
属性,但转换器将不会生效,因为未通知UI

如果您使用
observateCollection
作为项目资源,则可以侦听
observateCollection.CollectionChanged
事件,并更改事件回调中MasterDetailsView的显示

在此基础上,您可以通过派生
MasterDetailsView
来创建自定义依赖项属性以更改显示

CustomMasterDetailsView.cs

公共类CustomMasterDetailsView:MasterDetailsView
{
公共CustomMasterDetailsView():base()
{
this.DefaultStyleKey=typeof(CustomMasterDetailsView);
}
公共可视性清空可视性
{
get{return(可见性)GetValue(EmptyTipVisibilityProperty);}
set{SetValue(EmptyTipVisibilityProperty,value);}
}
公共静态只读从属属性EmptyTipVisibilityProperty=
DependencyProperty.Register(“EmptyTypeVisibility”、typeof(可见性)、typeof(CustomMasterDetailsView)、new PropertyMetadata(可见性.折叠));
}
CustomMasterDetailsView.xaml(资源字典)


<TextBlock
    HorizontalAlignment="Center"
    VerticalAlignment="Center"
    Style="{StaticResource SubtitleTextBlockStyle}"
    TextAlignment="Center"
    Text="No content"
    Visibility="{Binding ElementName=MyMasterDetailsView, Path=ViewModel.SampleItems.Count, Converter={StaticResource VisibleWhenZeroConverter}}"/>