2012-02-20 12 views
1

私はしばらく検索していますが、何も試しても問題は解決していません。以下のコードはエラーなしで実行されますが、テンプレートにはデータは表示されません。itemsourceの設定後、DataGridのSilverlightコントロールにデータが表示されない

<UserControl xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk" x:Class="GOReviewSL.UserControls.Announcements" 
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
mc:Ignorable="d" 
d:DesignHeight="75" d:DesignWidth="280" xmlns:my="clr-namespace:Local;assembly=Local"> 

<Grid x:Name="LayoutRoot" Background="White"> 
    <my:Fieldset Height="Auto" HorizontalAlignment="Left" Name="fieldset1" VerticalAlignment="Top"> 
     <StackPanel VerticalAlignment="Top" Orientation="Vertical"> 
      <sdk:DataGrid x:Name="AnnouncementsGrid" ItemsSource="{Binding}"> 
       <sdk:DataGrid.Columns> 
        <sdk:DataGridTemplateColumn> 
         <sdk:DataGridTemplateColumn.CellTemplate> 
          <DataTemplate> 
           <StackPanel VerticalAlignment="Top" Orientation="Vertical"> 
            <HyperlinkButton x:Name="AnnouncmentTitleLink" FontWeight="Bold" Content="{Binding Title}" Click="AnnouncmentTitleLink_Click" /> 
            <TextBlock x:Name="AuthorText" Text="{Binding Author}" FontSize="10" FontStyle="Italic"/> 
            <TextBlock x:Name="AnnouncementText" Text="{Binding Title}"/> 
           </StackPanel> 
          </DataTemplate> 
         </sdk:DataGridTemplateColumn.CellTemplate> 
        </sdk:DataGridTemplateColumn> 
       </sdk:DataGrid.Columns> 
      </sdk:DataGrid> 
     </StackPanel> 
    </my:Fieldset> 
    <Image Source="/GOReviewSL;component/Images/announcements.png" Height="20" HorizontalAlignment="left" Margin="20,1,0,0" VerticalAlignment="Top"/> 
</Grid> 

発表クラス:

public class Announcement 
{ 
    public string Author { get; set; } 
    public string Title { get; set; } 
    public string Text { get; set; } 
    public string ModifiedDate { get; set; } 

    public Announcement() 
    { 
     this.Author = string.Empty; 
     this.Title = string.Empty; 
     this.Text = string.Empty; 
     this.ModifiedDate = string.Empty; 
    } 

    public Announcement(string author, string title, string text, string modifiedDate) 
    { 
     this.Author = author; 
     this.Title = title; 
     this.Text = text; 
     this.ModifiedDate = modifiedDate; 
    } 
} 

マイバインディングコード:

 public Announcements() 
    { 
     InitializeComponent(); 
     objController.ListAnnouncementsCompleted += new EventHandler<ListAnnouncementsCompletedEventArgs>(objController_ListAnnouncementsCompleted); 
     objController.ListAnnouncementsAsync(); 
    } 

    void objController_ListAnnouncementsCompleted(object sender, ListAnnouncementsCompletedEventArgs e) 
    { 
     var objAnnouncements = from el in e.Result 
           select el; 

     AnnouncementsGrid.DataContext = objAnnouncements.ToList(); 
     AnnouncementsGrid.ItemsSource = objAnnouncements.ToList(); 
    } 

私はその最後のビットを数回まで変更しました。どんな助けでも大歓迎です!あなたがobjAnnouncements.ToList()は、実際の値を持っていることを確認する必要があり

// This is not necessary, and neither is ItemsSource="{Binding}" 
//AnnouncementsGrid.DataContext = objAnnouncements.ToList(); 
AnnouncementsGrid.ItemsSource = objAnnouncements.ToList(); 

:そこに冗長コールのビットがあるが

+0

この問題も発生しました。グリッドに空白を表示するだけです(ただし、row.countは正しいです)。 – meadlai

答えて

0

コードは、動作するはずです。その上にブレークポイントを設定します。チェックする

もの:

  1. あなたのイメージは、グリッドをカバーしているのだろうか。まずそれをコメントアウトしてみてください。
  2. FieldSetの内容がわかりません。 Datagridがフィールドセット外にあるときに機能しますか?
+0

その一部が隠されていました。フィールドセットはそれを隠すのに役立ちました。私はそれを見つけるためにフィールドセットを削除し、後で位置を調整した後にそれを追加することができました。 (フィールドセットは、HTMLフィールドセットのように動作するオブジェクトです)。問題を解決するのに役立ちました、上記の両方のご意見ありがとうございます。 – iAmMe

1

GridObservableCollectionにバインドしてください。最初はListを使用していましたが、DataGridの読み込み中に多くの問題がありました。 Listではなく、SilverlightでObservableCollectionを使用することをお勧めします。 Why to use ObservableCollection instead of List in Silverlight

using System.Collections.ObjectModel; 

    ObservableCollection<Announcement> announcementCollection; 

      public ObservableCollection<Announcement> AnnouncementCollection 
      { 
       get { return announcementCollection; } 
       set 
       { 
        announcementCollection = value; 
        NotifyPropertyChanged("AnnouncementCollection"); 
       } 
      } 
+1

ありがとうございます。これは非常に役に立ちました。データはそこにありましたが、表示されませんでした。これはそれを解決するのに役立ちました。問題を解決するのに役立ちました、以下の両方のご意見ありがとうございます。 – iAmMe

関連する問題