バインディングパスプロパティはに何を設定すべきですか?
-
06-09-2019 - |
質問
私はC#で、この構造体の定義を持っていると仮定します:
public struct TimeSlotInfo
{
public int TimeSlotID;
public int StartMin;
public int CalcGridColumn;
public string BackgroundCol;
public bool ToDisable;
}
そして、私はそうとLINQクエリを持っています:
var TimeSlotsInfo =
from ts in datacon.TimeSlots
select new TimeSlotInfo
{
TimeSlotID = ts.TimeSlotID,
StartMin = ts.StartMin,
CalcGridColumn = CalcTimeSlotGridColumn(ts.StartMin),
BackgroundCol = ts.ColorName,
ToDisable = false
};
私は以下のようにListBoxの発言のItemsSourceプロパティを設定する場合:
lstBox.ItemsSource = TimeSlotsInfo;
さて、私は上記のクエリの結果から「BackgroundCol」フィールドを参照するために、結合パスを設定するのですか?
私が試した{バインディングパス= TimeSlotInfo.BackgroundCol}、{バインディングパス= TimeSlotInfo / BackgroundCol}、そして最終的に{バインディングパスは= BackgroundCol} ...それらのどれも働いているように見えるん..
誰が助けることはできますか?私は可能な限り一例を簡素化しようとしました。私の問題は十分に明らかであると思います。 事前に感謝します。
解決
最後のものは、({バインディングパス= BackgroundCol})正しい - ただし、プロパティのみに結合することができ、フィールドに結合することができません。であるためにあなたのクラスを定義します:
class TimeslotInfo {
public int TimeslotId {get; set;}
/* Etc... */
}
他のヒント
あなたはパウロが言うように結合するためのプロパティを使用する必要があるだけでなく、一般的には、あなたは公共避ける必要がありますフィールドは、最初の場所でします。
それは、構造体でなければなりませんようにまた、これは感じていない - あなたは本当に値型のセマンティクスをしたいですか?疑わしい場合、あなたはC#でクラスを作成することにデフォルトで設定される必要があり - 。それはあなたが本当には構造体をしたい<全角>ことはかなりまれです。
最後に、あなたはをしてもの構造体をしたいが、あなたはほとんど常に構造体は不変にする必要がありました。あなたは、変更可能な構造体からの予期せぬ結果を持っていることがほぼ確実です。それはすべてが順調に定義され、正当な理由のためだが、それはおそらく、あなたが期待する行動ではありません。変更可能な構造体は悪です。
、あなたは自分のリストボックスに「BackgroundCol」にDisplayMemberPathプロパティを設定することができます。これはあなたが達成しようとしているものでない場合は、より具体的に説明してくださいます。
タグ!!これがお役に立てば幸い