2009-09-30 19 views
12
dışında elemana veri kılavuzunu Combobox ItemSource Bağlama aşağıdaki yapmak istiyorum

: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; 
} 

Şimdi benim (WPF Toolkit) DataGrid şuna benzer:

<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> 

Şimdi benim sorunum, PreLoadedUserList öğesinin ItemSource (SomeDataRowList) dışında olduğunu ve bunun dışında bir şeye nasıl bağlanacağımı bilmiyorum. Aslında bunu istiyorum Ne: - ComboBox PreLoadedUserList yılında Ekran - benim açıklama çok garip :-) ise seçilen Değerine (RowEntries) SelectedItem.UserAge Değerini ayarlayın ComboboxItem.Age

haber ver

Alkış

cevap

23

gibi bir şey yapardım.

Alkışlar

+0

Bu bana çok yardımcı oldu ... Teşekkürler! –

+0

Vay, ben bir 'DataGridComboBoxColumn' ile deniyordum ve deniyordum .. Ama sonra MAGIC! Güzel örneğiniz (Şablon şeyler ile) Teşekkürler! –

+0

Bu, sorumu çözmemde bana yardımcı oldu, Joseph. Bu başlık combobox'ının ele alınması benim sıradaki görevimdi. Çözümünüz bana çok yardımcı oldu ve çok zaman harcadım. Çok teşekkürler. – Tvd

0

RowEntries özel sınıf ise, sadece o PreLoadedUserList bir başvuru vermek, teşekkür ederiz. Daha sonra, her örnek için bir işaretçi vardır ve bunu bağlayıcınızda kullanabilirsiniz.

Sadece bir öneri olarak, Kullanıcılar ve RowEntries gibi sınıf adları koleksiyonlar olduklarını öne sürüyorlar, ancak kullanımınız koleksiyonun ürünü değil gibi görünüyor. Herhangi bir karışıklığı önlemek için tekil isimleri kullanırdım. Ben İşte biz bu çok başkası yardımcı olabilir :-)

<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> 

Umut gitmek bu

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); 
İlgili konular