2012-07-26 49 views
6

我试图创建势必ObservableCollectionLoggedInUser绑定用户控件栈面板可观察集合在WPF

的用户控件栈面板的联系人列表中的用户控件:

<UserControl.Content> 
    <Grid> 
     <Border BorderBrush="LightBlue" BorderThickness="1,1,1,1" CornerRadius="8,8,8,8" Height="350" HorizontalAlignment="Left" VerticalAlignment="Top" Width="290"> 
      <ItemsControl x:Name="tStack" Grid.Column="0"> 
       <ItemsControl.ItemsPanel> 
        <ItemsPanelTemplate> 
         <StackPanel Orientation="Horizontal"/> 
        </ItemsPanelTemplate> 
       </ItemsControl.ItemsPanel> 
       <ItemsControl.ItemTemplate> 
        <DataTemplate> 
         <Button Height="30" Content="{Binding Username}"/> 
        </DataTemplate> 
       </ItemsControl.ItemTemplate> 
      </ItemsControl> 
     </Border> 
    </Grid> 
</UserControl.Content> 

用户控制代码背后

public partial class ContactList : UserControl 
{ 
    public ContactList() 
    { 
     InitializeComponent(); 

     ContactListViewModel clvm = ContactListViewModel.GetInstance(); 

     clvm.Contacts.Add(new LoggedInUser("test", "123")); 

     this.DataContext = clvm.Contacts; 
    } 
} 

而且我ContactListViewModel

class ContactListViewModel 
{ 
    private static ContactListViewModel instance; 

    public ObservableCollection<LoggedInUser> Contacts = new ObservableCollection<LoggedInUser>(); 

    public static ContactListViewModel GetInstance() 
    { 
     if (instance == null) 
      instance = new ContactListViewModel(); 

     return instance; 
    } 
} 

LoggedInUser类,以防万一

public class LoggedInUser 
{ 
    private string username; 
    public string Username 
    { 
     get { return username; } 
     set { username = value; } 
    } 
} 

我堆栈面板仍然是空的!帮帮我!

+0

你使用的是WPF还是Silverlight? – Bernard 2012-07-26 18:19:00

+0

我只问了6个问题,从来没有得到满意的答案。也许这将是一个!另外,编辑提到WPF的问题。 – Julien 2012-07-26 18:21:49

+1

您还没有将ItemsControl的ItemsSource属性绑定到viewModel的Contact属性。做到这一点,然后代替'this.DataContext = clvm.Contacts;'写出'this.DataContext = clvm; ' – Dante 2012-07-26 18:28:27

回答

7

您没有限制您的ItemsControlItemsSource,因此它实际上没有数据。你的数据上下文是收藏,所以你只需要做到这一点:

<ItemsControl ItemsSource="{Binding}" ... 

另外,如果你不是设置您的数据上下文视图模型实例(如通常用于MVVM),你可以这样做:

<ItemsControl ItemsSource="{Binding Contacts}" ...