如何在Datagrid中显示“找不到任何项目”

时间:2011-08-23 06:37:03

标签: wpf windows

               <dg:DataGrid.Resources>
                        <ViewModel:SmartMessenger  x:Key="Noitemsfound">
                        </ViewModel:SmartMessenger>
                      </dg:DataGrid.Resources>
                 <dg:DataGrid.RowDetailsTemplate>
                        <DataTemplate>
                          <StackPanel>`enter code here`
                            <TextBlock Text="{Binding Source={StaticResource         Noitemsfound }, Path=pNorecords,Mode=TwoWay}" />
                          </StackPanel>
                        </DataTemplate>
                 </dg:DataGrid.RowDetailsTemplate>

这里我试图绑定一个文本块,当数据网格中没有项目时,该文本块将显示一条消息。我正在使用VS 2008 Express版。 问题是我无法将属性Noitemsfound与SmartMessenger类后面的代码绑定...这里缺少什么?

2 个答案:

答案 0 :(得分:5)

如果您只想在没有项目的情况下在数据网格中显示消息 - 您可以使用样式执行此操作。将此样式放在App.xaml资源中或至少放在datagrid资源中。

    <Style x:Key="{x:Type ItemsControl}" TargetType="{x:Type ItemsControl}">
    <Style.Triggers>
        <DataTrigger Binding="{Binding Items.Count, RelativeSource={RelativeSource Self}}" Value="0">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="None">
                        <VisualBrush.Visual>
                            <TextBlock Text="no items" 
                                       FontFamily="{StaticResource FontFamily}"
                                       FontSize="{StaticResource FontSize}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </DataTrigger>
        <DataTrigger Binding="{Binding Items, RelativeSource={RelativeSource Self}}" Value="{x:Null}">
            <Setter Property="Background">
                <Setter.Value>
                    <VisualBrush Stretch="None">
                        <VisualBrush.Visual>
                            <TextBlock Text="no items" 
                                       FontFamily="{StaticResource FontFamily}"
                                       FontSize="{StaticResource FontSize}"/>
                        </VisualBrush.Visual>
                    </VisualBrush>
                </Setter.Value>
            </Setter>
        </DataTrigger>
    </Style.Triggers>
</Style>
<Style x:Key="{x:Type DataGrid}" TargetType="{x:Type DataGrid}" BasedOn="{StaticResource {x:Type ItemsControl}}">
</Style>

答案 1 :(得分:1)

检查输出窗口。 WPF转储输出窗口发生绑定错误/异常。在那里你有机会验证它是否绑定到正确的源,如果路径是正确的等等。

您还可以尝试在绑定表达式中添加虚拟转换器。 Converter为您提供了调试绑定表达式的机会