2011-01-14 24 views

答えて

4

最後に私は方法を見つけることができます。

  1. すると、空のグリッド、グリッド上のデフォルトの行を追加し
  2. 上のスタイルを設定し

    <DataGrid.RowDetailsTemplate> 
        <DataTemplate> 
         <StackPanel> 
          <TextBlock Text="No Record Found" Width="400"></TextBlock> 
         </StackPanel> 
        </DataTemplate> 
    </DataGrid.RowDetailsTemplate> 
    
  3. を「いいえレコードが見つかっ」メッセージでテキストブロックが含まれているRowDetailTemplateを作成します。データグリッド

    <DataGrid.Style> 
        <Style TargetType="DataGrid"> 
         <Setter Property="RowDetailsVisibilityMode" Value="Collapsed"></Setter> 
         <Style.Triggers> 
          <DataTrigger Binding="{Binding DataContext.IsRecordExists, 
                RelativeSource={RelativeSource Mode=FindAncestor, 
                AncestorType={x:Type local:MainWindow}}}" Value="false"> 
           <Setter Property="RowHeight" Value="0"></Setter> 
           <Setter Property="RowDetailsVisibilityMode" Value="Visible"></Setter> 
          </DataTrigger> 
         </Style.Triggers> 
        </Style> 
    </DataGrid.Style> 
    

ことでデフォルト(DataGridで使用可能なレコード)の行詳細テンプレートは折りたたまれます。

CLRのpopertyをチェックするDataTrigger .Falseの場合は、行の詳細テンプレートを表示します。

第1ステップで追加した既定の行を非表示にするために、rowheightを0に設定する理由。

+0

私は同じですが、silverlight.But はSilverlightでサポートされていません:(...任意の代替? –

+0

同じ機能を探していますが、上記のコードでも探していますAncestorType = {x:local :MainWindow}}}、 "タイプローカル:MainWindowが見つかりませんでした"というエラーが表示されました。先祖のタイプはどこに配置する必要がありますか? – Surya

5

グリッド上にテキストブロックを中央に配置し、行数に基づいて可視性を設定するのは簡単です。私は通常、MVVMを使用しており、可視モデルをView Modelプロパティにバインドします。

<Grid> 
    <toolkit:DataGrid> 
     <toolkit:DataGrid.Columns> 
      . 
      . 
      . 
     </toolkit:DataGrid.Columns> 
    </toolkit:DataGrid> 
    <TextBlock Text="No Records Found" HorizontalAlignment="Center" VerticalAlignment="Center" Visibility="{Binding EmptyMessageVisibility, Mode=OneWay, FallbackValue=Visible}" /> 
</Grid> 
+0

目的を解決するかもしれませんが、 – pchajer

11

質問が投稿されてから長い時間です。しかし、私はこれが他の人には役に立つかもしれないと思った。

<Window.Resources> 
    <BooleanToVisibilityConverter x:Key="BooleanToVisibilityConverter" /> 
</Window.Resources> 

<DataGrid Name="dgProjects" ItemsSource="{Binding Projects}" AutoGenerateColumns="True" /> 

<TextBlock Text="Employee has no projects" Visibility="{Binding Items.IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}, ElementName=dgProjects}" /> 

簡潔にするために、私はAutoGenerateColumns = "True"に設定しました。列を定義してください。このように空のデータソースがバインドされると、列名は「空の行」メッセージとともに表示されます。

+1

ヘッダーを保持したくない場合は、これが最善の解決策だと思います。 –

+0

これは最も実用的でシンプルなソリューションです。 – gbdavid

関連する問題