1
私ははどのようにSilverlightのデータグリッドのためのコレクションのプロパティにバインドする
<Grid x:Name="LayoutRoot" Background="White">
<sdk:DataGrid AutoGenerateColumns="False" ItemsSource="{Binding WrapperClass}">
<sdk:DataGrid.Columns>
<sdk:DataGridTextColumn Header="Name" Binding="{Binding People.Name, Mode=TwoWay}"/>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
</Grid>
として、私はXAMLを持ってBinding a grid with two datasources in silverlight
@尋ねた質問をテストするためのサンプルコードを記述しようとしていました私の見解モデルコード
private ItemWrapper _wrapperClass;
public ItemWrapper WrapperClass
{
get
{
if (_wrapperClass == null)
_wrapperClass = new ItemWrapper();
return _wrapperClass;
}
}
項目ラッパーと人のクラス定義
public class ItemWrapper
{
private ObservableCollection<Person> _people;
public ObservableCollection<Person> People
{
get
{
return _people;
}
}
public ItemWrapper()
{
_people = new ObservableCollection<Person>();
_people.Add(new Person { ID = 1, Name = "Name1", JobTitle = 1 });
_people.Add(new Person { ID = 2, Name = "Name2", JobTitle = 2 });
}
}
public class Person
{
public int ID { get; set; }
public string Name { get; set; }
public int JobTitle { get; set; }
}
バインディングプロパティが動作する場合にプログラムを実行すると、グリッドに表示される名前が必要ですが、そうではありません。ヘッダーが表示されます。ここに何もないのですか? おかげで、
はい、動作しますが、それは私が解決しようとしているものではありません。私が解決しようとしているのは、リストボックスが存在する間にすべての列がPeopleの2つの異なるデータソースを持つことです。データソースはWrapperクラスの別のプロパティになります。 – Nair
私はちょうど「私はここに何も欠けていますか?」と答えました。つまり、コレクション(データソース)とコントロール(データグリッド)の間に1対1のマッピングが必要です。もう一つのヒントは私に与えることができますそれはバインディング自体のトリックです。あなたは '{Binding Name、Mode = TwoWay、Source = {Relative/StaticResource .....}}'を使うことができますが、** Item **レベルで別のコレクションを必要とする場合は、コレクションにバインドできません。 – codeSetter
Thanks私は束縛のモデルについて同意します。私が後にしているのは、http://stackoverflow.com/questions/4224747/binding-a-grid-with-two-datasources-in-silverlightで提供されている解決策です(質問の最初で述べたように) – Nair