2017-08-29 3 views
0

OK、私はすでに同様の質問がされていると思いますが、これを動作させることはできません。あなたは私がのObservableCollectionにバインドしています見ることができるようにItemsControlのアイテムテンプレートとしてUserControlを使用する

public class CommunicatorViewModel : ViewModelBase 
{ 
    public ObservableCollection<HealthReportSummaryViewModel> HealthReports { get; set; } 
    public CommunicatorModel Model { get; set; } 

    public CommunicatorViewModel(HealthReportData data) 
    { 
     Model = new CommunicatorModel(); 
     HealthReports = new ObservableCollection<HealthReportSummaryViewModel> 
    { 
     new HealthReportSummaryViewModel {Title = "View1", Description = "Some desc."}, 
     new HealthReportSummaryViewModel {Title = "View2", Description = "Some desc."} 
    }; 
} 

}

:このようなその背後にあるビューモデルを持っている

<Grid Background="White"> 
     <Grid.RowDefinitions> 
      <RowDefinition Height="50"/> 
      <RowDefinition/> 
     </Grid.RowDefinitions> 
     <Label Content="Model Health Report:" Margin="10,10,10,0" Height="26" VerticalAlignment="Top" FontWeight="Bold"/> 
     <ItemsControl Grid.Row="1" 
         ItemsSource="{Binding HealthReports, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"> 
      <ItemsControl.ItemTemplate> 
       <DataTemplate DataType="{x:Type hr:HealthReportSummaryControl}"/> 
      </ItemsControl.ItemTemplate> 
     </ItemsControl> 
    </Grid> 

:私はこのようなItemsControlにして表示していHealthReportSummaryViewModelオブジェクトのこれらはコンストラクターに取り込まれます。私は実行時にオブジェクトをチェックしたが、正しい。ビューモデルで

<Grid> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="50"/> 
      <ColumnDefinition Width="2"/> 
      <ColumnDefinition/> 
     </Grid.ColumnDefinitions> 
     <Ellipse Grid.Column="0" 
       Fill="{Binding FillColor}" 
       Margin="2"/> 
     <Rectangle Grid.Column="1" 
        Fill="DarkGray" 
        Margin="0,2"/> 
     <Label Content="{Binding Title}" 
       Grid.Column="2" 
       Margin="5,0,10,0" 
       VerticalAlignment="Top"/> 
     <TextBlock Grid.Column="2" 
        Margin="5,10,10,0" 
        TextWrapping="Wrap" 
        Text="{Binding Description}"/> 
    </Grid> 

実際の制御は、このようになります

public class HealthReportSummaryViewModel : ViewModelBase 
    { 
     private System.Windows.Media.Color _fillColor; 
     public System.Windows.Media.Color FillColor { 
      get { return _fillColor; } 
      set { _fillColor = value; RaisePropertyChanged(() => FillColor); } 
     } 

     private string _title; 
     public string Title 
     { 
      get { return _title; } 
      set { _title = value; RaisePropertyChanged(() => Title); } 
     } 

     private string _description; 
     public string Description 
     { 
      get { return _description; } 
      set { _description = value; RaisePropertyChanged(() => Description); } 
     } 
    } 

私は例外を取得していないのですが、私の窓は、空の項目があります。ユーザーコントロールにはデータバインディングに依存しない矩形がありますが、これはおそらくコンテンツのサイズに関する問題ですか?私はこれを理解できません。それはすべて空白です。どういうわけか各ItemsControlアイテムのサイズを設定する必要がありますか、または配置されているグリッドのサイズに調整するだけですか?私はここで何が欠けていますか?すべての助けに感謝します。

+4

あなたの 'DataTemplate'は空ですので、空のアイテムが見えます。 – dymanoid

+0

どうですか? HealthReportsのすべてのHealthReportSummaryViewModelに対してHealthReportSummaryControlの新しいインスタンスを作成するはずですか? – konrad

+0

私は私のデータテンプレートとしてUserControlである私のHealthReportSummaryControlを使用したいと思います。どのように私はそれを追加できますか? – konrad

答えて

2

あなたDataTemplate定義が間違っている:

<ItemsControl.ItemTemplate> 
    <DataTemplate DataType="{x:Type hr:HealthReportSummaryControl}"/> 
</ItemsControl.ItemTemplate> 

これはHealthReportSummaryControlタイプのアイテムのための空のデータテンプレートを定義します。

代わりに、あなたはそのようにそれを定義する必要があります。

<ItemsControl.ItemTemplate> 
    <DataTemplate DataType="{x:Type hr:HealthReportSummaryViewModel}"> 
     <hr:HealthReportSummaryControl/> 
    </DataTemplate> 
</ItemsControl.ItemTemplate> 

これはHealthReportSummaryViewModelアイテム用のテンプレートを定義します。

+0

まあ、私はばかです。ありがとう! – konrad

関連する問題