DataGridに何も表示されませんが、バインドされたクラスにはデータ行が含まれています。ご覧のとおり、私のMockSnifferSourceクラスはListから派生しています。これは、コレクションがIListに基づいているという要件を満たすはずです。WPF DataGridにList <>が表示されない
<Window x:Class="WpfSniffer.MainWindow"
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"
xmlns:local="clr-namespace:WpfSniffer"
mc:Ignorable="d"
Title="MainWindow" Height="350" Width="525">
<Grid>
<DataGrid x:Name="dataGrid" Height="Auto" Width="Auto"
HorizontalAlignment="Stretch" Margin="0" VerticalAlignment="Stretch"
ItemsSource="{Binding}" AutoGenerateColumns="True">
<DataGrid.DataContext>
<local:MockSnifferSource/>
</DataGrid.DataContext>
</DataGrid>
</Grid>
public class MockSnifferSource : List<SnifferMessage>
{
public MockSnifferSource()
{
Add(new SnifferMessage
{ Node = "One", Command = 1, Time = DateTime.Now, Payload = "12345", Metadata = "TTD=5" });
}
}
public struct SnifferMessage
{
public string Node;
public byte Command;
public DateTime Time;
public string Payload;
public string Metadata;
}
誰もが問題の原因を特定することはできますか?
まず、 'List'を使用せず、' ObservableCollection'を使用してください。しかし、ここではあなたの問題ではありません。あなたの問題はおそらくフィールドにバインドしようとしています。できません。 'SnifferMessage'は、フィールドではなくプロパティを持たなければなりません:' public string Node {get;セット; } 'など。最後に、あなたのコレクションがあなたのDataContextであるように見えます。それは良い考えではありません。後で修正するだけです。あなたのビューモデルにコレクションのプロパティを与え、それをバインドします。 –
ありがとうございます。私がその記事を見た直前にこれを見て、愚かな私。ビューモデルが何であるかを把握するのにしばらく時間がかかりましたが、それは下の例にあったので、うまくいきました。 – Cormagh
素晴らしいあなたは彼の答えを受け入れるべきです。 –