2009-09-30 11 views
12

の外の要素にデータグリッド内のコンボボックスItemSourceをバインド:C#/ WPF:私は、次の手順を実行してみたいのDataContext

public List<Users> PreLoadedUserList { get; set; } 
public List<RowEntries> SomeDataRowList { get; set; } 

public class Users 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 
public class SomeDataRowList 
{ 
    public int UserAge { get; set; 
} 

は今私(WPF Toolkitの)データグリッドは次のようになります。

<my:DataGrid AutoGenerateColumns="False" MinHeight="200" 
      ItemsSource="{Binding Path=SomeDataRowList}"> 
    <my:DataGridComboBoxColumn Header="Age" 
           ItemsSource="{Binding Path=PreLoadedUserList}" 
           DisplayMemberPath="Name" 
           SelectedValueBinding="{Binding Path=UserAge}"/> 

</my:DataGrid> 

私の問題は、PreLoadedUserListがItemSource(SomeDataRowList)の外にあり、その外側の何かにバインドする方法がわかりません。私は実際にそれたい: - コンボボックスPreLoadedUserList で表示 - 選択ComboboxItem.Age

の値に(RowEntries)の値を設定SelectedItem.UserAgeすることは私の説明があまりにも奇妙な:-)であれば、私に教えてください

は 乾杯

答えて

23

ような何かをしたいです。

乾杯

+0

これは私を大いに助けました...ありがとう! –

+0

うわー、私はしようとしていた 'DataGridComboBoxColumn'と何も..しかし、マジック!あなたの美しい例が動作します(テンプレートのもの)Thanks! –

+0

これは私の質問を解決するのに役立ちました。これらのヘッダーコンボボックスを処理することは私の次の仕事でした。あなたのソリューションは私に多くの助けとなり、多くの時間を節約しました。どうもありがとう。 – Tvd

0

RowEntriesは、カスタムクラスがある場合は、ちょうどそれをPreLoadedUserListへの参照を与える、ありがとうございます。次に、各インスタンスにはポインタがあり、バインディングで使用することができます。

ユーザーやRowEntriesのようなクラス名は、それらがコレクションであることを示唆していますが、使用法はコレクションではないアイテムのように見えます。混乱を避けるために私は単数名を使用したいと思います。私はここでは、これはあまりにも他の誰かを助けることができる:-)

<my:DataGridTemplateColumn Header="SomeHeader"> 
    <my:DataGridTemplateColumn.CellTemplate> 
     <DataTemplate> 
      <ComboBox SelectedValuePath="UserAge" 
       SelectedValue="{Binding Age}" 
       DisplayMemberPath="Name" 
       ItemsSource="{Binding Path=DataContext.PreLoadedUserList, 
        RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}}" 
       IsReadOnly="True" Background="White" /> 
     </DataTemplate> 
    </my:DataGridTemplateColumn.CellTemplate> 
</my:DataGridTemplateColumn> 

希望を行くこの

public List<User> PreLoadedUserList { get; set; } 
public List<RowEntry> SomeDataRowList { get; set; } 

public class User 
{ 
    public int Age { get; set; } 
    public string Name { get; set; } 
} 
public class RowEntry 
{ 
    public int UserAge { get; set; } 
    public List<User> PreLoadedUserList { get; set; } 
} 

// at the point where both PreLoadedUserList is instantiated 
// and SomeDataRowList is populated 
SomeDataRowList.ForEach(row => row.PreLoadedUserList = PreLoadedUserList); 
関連する問題