必要なデータを保持するための単純なクラスを作成できます。このクラスでは、各ファイルからの行を保存し、Color
等しいかどうかを示します。
public class LineComparer
{
public string Line1 { get; set; }
public string Line2 { get; set; }
public Brush Color { get; set; }
}
次のステップでは、リストにファイルからのデータを入力する必要があります。
public List<LineComparer> _comparer = new List<LineComparer>();
public void ReadFiles()
{
TextReader tr1 = new StreamReader("file1.txt");
TextReader tr2 = new StreamReader("file2.txt");
string line1, line2 = null;
while ((line1 = tr1.ReadLine()) != null)
{
_comparer.Add(new LineComparer{ Line1 = line1 });
}
int index = 0;
while ((line2 = tr2.ReadLine()) != null)
{
if(index < _comparer.Count)
_comparer[index].Line2 = line2;
else
_comparer.Add(new LineComparer{ Line2 = line2 });
index++;
}
tr1.Close();
tr2.Close();
_comparer.ForEach(x => { if(x.Line1 != x.Line2) x.Color = new SolidColorBrush(Colors.Red); else x.Color = new SolidColorBrush(Colors.Green); });
}
で使用できるファイルの違いを表示するListBox
にはItemTemplate
:
<ListBox ItemsSource="{Binding}"
Grid.IsSharedSizeScope="True"
>
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Background="{Binding Color}">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" SharedSizeGroup="A" />
<ColumnDefinition Width="10" />
<ColumnDefinition Width="*" SharedSizeGroup="B" />
</Grid.ColumnDefinitions>
<TextBlock Text="{Binding Line1}"
TextWrapping="Wrap" />
<TextBlock Text="{Binding Line2}"
TextWrapping="Wrap"
Grid.Column="2"
/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
例:
"file1.txt":
First
Second
Third
Fourth
Fifth
Sixth
Seventh
"file2.txt":
First
second
Third
Fourth
Fifth
結果は次のとおりです。

ソリューションの例(FileComparer.zip) を次に示します。