2011-08-10 27 views
0

いくつかの単純なDataGrids(xmlns:kit = "http://schemas.microsoft.com/wpf/2008/toolkit")にバイナリファイルの内容を表示したい")。私はファイルのレイアウトを知っています。それは非常に簡単です。単純なWPFバインディングの質問。 DataGridを構造体の1つの構造体と配列(リスト)にバインドする

まず私は、フォームのいくつかの簡単な構造体を持っている:

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public class PartitionBasicStationData 
{ 
    public uint longitude; 
    public uint latitude; 
    public uint StationCode; 

} 

私は、ファイルにこれらのちょうど1 intanceを持っています。それはおそらく過剰ですが、私はそれをDatagridに投げたいです。私は成功したバイナリファイルを読み込み、作成した後、

<kit:DataGrid Name="m_gridPartion1" MinWidth="120" MinHeight="120"></kit:DataGrid> 

とコードで:私は私のXAMLのように見えるなど、私は自動的に「経度」、「緯度」、のようないくつかの単純な列ヘッダを取得したい期待していました構造、私はこれを行う:

m_gridPartion1.ItemsSource = new Partition1[1] { partition1 }; 
//m_gridPartion1.DataContext = new Partition1[1]{partition1}; // also tried this 
// m_gridPartion1.ItemsSource = partion1; // and I tried this 

これは動作する必要がありますか?

私の2番目のグリッドには、単純な構造もありますが、それらの多くがあります。私はちょうどこのような何か行うことができます願っていた

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public class Datum 
{ 
    public uint temperature; 
    public uint windVelocity; 

} 

のような構造に見える:

m_gridData.ItemsSource = myList; // myList is List<Datum> 

任意のチュートリアルやポインタをいただければ幸いです。私が遭遇した資料のほとんどは、XAML(これは簡単なのであれば反対ではない)からのバインド、または過剰な使用(列名の設定など)です。

おかげで、

デイブ

答えて

0

[StructLayout(LayoutKind.Sequential, Pack = 1)] 
public class PartitionBasicData 
{ 
    public uint longitude { get; set; } 
    public uint latitude { get; set; } 
    public uint StationCode { get; set; } 
} 

として、あなたのクラスを定義し、これらの変更により

(手動で列を定義したくない場合)TrueにデータグリッドのAutoGenerateColumnsプロパティを設定し、私がすることができました次のコードは、仕事を得る:

m_gridPartition1.ItemsSource = new PartitionBasicData[] { new PartitionBasicData() { latitude = 1, longitude = 2, StationCode = 3 }};


コメントに尋ねた質問には編集:あなたはAutoGenerateColumns属性を削除し、(あなたがStationCodeプロパティのカスタム列を指定されるように)手動で列を定義する必要があります。この場合

のためにStationCode列の場合、配列をフォーマットするためにConverterを指定する必要があります。あるいは、byte []が常に既知の長さと形式であれば、BindingのStringFormatプロパティを指定することができます。

どちらの方法でも、その列のCanUserSortプロパティをFalseに設定するか、SortMemberPathプロパティを変換が不要なものに設定して、ユーザーが列をクリックしたときに実行時例外がスローされないようにする必要があります。ヘッダ。または、元の質問で指定されているように、このDataGridに1つの行しか存在しないため、DataGridのCanUserSortColumnsプロパティをFalseに設定できます。

コンバータ方式:

<DataGrid Name="m_gridPartition1"> 
    <DataGrid.Columns> 
     <DataGridTextColumn Header="Longitude" Binding="{Binding Path=longitude}" /> 
     <DataGridTextColumn Header="Latitude" Binding="{Binding Path=latitude}" /> 
     <DataGridTextColumn Header="Station Code" Binding="{Binding Path=StationCode, Converter={StaticResource someConverterToStyliseByteArray}}" CanUserSort="False" /> 
    </DataGrid.Columns> 
</DataGrid> 

StringFormat方法:

<DataGridTextColumn Header="Station Code" Binding="{Binding Path=StationCode, StringFormat='{}{0}-{1}-{2}'}" CanUserSort="False" /> 
+0

パーフェクト!ありがとう、答えとしてマーク。私はボーナスの質問をすることはできますか?ステーションコードをパブリックバイト[]として作成した場合StationCode {get; set;}、私は何をして、バイトがグリッドに現れるでしょうか?現在、それは空白です。私はint、unitsなどを取得すると推測しています。無料ですが、byte []に​​は何らかのフォーマットが必要です。 – Dave

+0

ありがとう脂肪!私は両方のアイデア(String FormatとConverter)を使用しました。魅力のように働いた。 – Dave

0

は、パブリックプロパティとしてフィールドを公開し、それがうまくいくかもしれません。