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アイテムのサイズを設定する必要がありますか、または配置されているグリッドのサイズに調整するだけですか?私はここで何が欠けていますか?すべての助けに感謝します。
あなたの 'DataTemplate'は空ですので、空のアイテムが見えます。 – dymanoid
どうですか? HealthReportsのすべてのHealthReportSummaryViewModelに対してHealthReportSummaryControlの新しいインスタンスを作成するはずですか? – konrad
私は私のデータテンプレートとしてUserControlである私のHealthReportSummaryControlを使用したいと思います。どのように私はそれを追加できますか? – konrad