これは、グリッド内のRichTextBoxに関する質問のフォローアップです。私はかなり遠くまで行きましたが、今はMVVMに変換する必要があります。タイプコンバータが呼び出されないため、問題はおそらくデータバインディングにあります。2つのデータグリッドを使用して、セットアップをより迅速にテストします。
ビューは、すべてのデータを含むViewModelを取得します。
<Window.Resources>
<local:DifferenceToTextConverter x:Key="DifferenceToTextConverter" />
<DataTemplate x:Key="cellTemplate" DataType="{x:Type Label}">
<Label Content="{Binding Converter={StaticResource ResourceKey=DifferenceToTextConverter}}" >
</Label>
</DataTemplate>
</Window.Resources>
<DataGrid Name="TestGrid"
ItemsSource="{Binding Source=DifferenceViewModel, Path=DifferenceData, Converter={StaticResource DifferenceToTextConverter}}"
HeadersVisibility="Column"
ItemTemplate="{StaticResource cellTemplate}" >
</DataGrid>
</DataGrid>
<DataGrid Name="OhterGrid" DataContext="{Binding ElementName=DifferenceViewModel, Path=DifferenceData}" HeadersVisibility="Column" >
<DataGrid.ItemTemplate>
<DataTemplate DataType="{x:Type Label}">
<Label Content="{Binding Converter={StaticResource ResourceKey=DifferenceToTextConverter}}" >
</Label>
</DataTemplate>
</DataGrid.ItemTemplate>
</DataGrid>
public DifferenceView(ViewModel.DifferenceViewModel differenceViewModel)
{
InitializeComponent();
this.DifferenceViewModel = differenceViewModel;
}
ViewModel、カスタムクラスのオブジェクトで満たされたDataTable。私はこれがそれを埋めるためのメソッドとしてデータを持っていることを知っています。そして、プロジェクトのルート名前空間にある私のコンバーター
namespace ViewModel
{
public class DifferenceViewModel
{
private DataTable differenceData;
/// <summary>
/// Differences between properties.
/// </summary>
public DataTable DifferenceData
{
get
{
return this.differenceData;
}
private set
{
this.differenceData = value;
}
}
}
}
class DifferenceToTextConverter : System.Windows.Data.IValueConverter
{
public object Convert(object value, Type sourceType, object parameter, System.Globalization.CultureInfo culture)
{
TextBlock cell = new TextBlock();
// Convert custom data to text representation.
return cell;
}
}
制約:
- MVVMを使用する
- 可能な場合はxamlでスタイル設定します。
- 個々の文字にスタイルが適用されたテキスト。
- 列と行の数が不明です。
- カスタムタイプコンバーターは、セルテキスト全体を作成する必要があります。