ListView ItemsSource属性绑定

时间:2011-11-29 05:36:15

标签: c# wpf xaml listview mvvm

在我的ViewModel中,我有2个属性:首先是

    public ContactList ContactList
    {
        get { return _contacts; }
    }

其中ContactList : IEnumerable<Contact>,其次是包装

public ObservableCollection<Contact> Contacts
{
    get
    {
        return new ObservableCollection<Contact>(ContactList);
    }
}

在我看来,我有一个ListView。当我将这个ListView绑定到ContactList时 - 没有任何反应,但如果我使用Contacts属性作为它的ItemsSource - 一切都很好。

更新

<ListView ItemsSource="{Binding Path=Contacts}">
    <ListView.View>
        <GridView>
            <GridViewColumn Width="230">
                <GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <views:ContactViewer 
                                DataContext="{Binding Converter={StaticResource ContactToViewModelConverter}}" />
                        </DataTemplate>
                    </GridViewColumn.CellTemplate>
                </GridViewColumn>
        </GridView>
    </ListView.View>
</ListView>

至于不工作的代码 - 我刚刚在绑定中将Contacts更改为ContactList。在第二种情况下 - 转换器没有任何内容,即使没有显示绑定错误。

2 个答案:

答案 0 :(得分:0)

由于您的ContactList继承自IEnumerable而非ObservableCollection,我很确定您遇到此问题。

答案 1 :(得分:0)

我不知道你的情况是否......但是在加载ListView之前,数据应该可用于ListView ....这样它可以填充ListView ...如果不是你应该使用INotifyPropertyChanged这样你就可以告诉ListView我已经加载.... observable collection fires collection更改了listView的通知,所以listView相应地填充它...这应该工作

     public ContactList ContactList     
     {         
              get 
              { 
                       return _contacts; 
              } 
              Set
              {
                       _contacts= value;
                       OnPropertyChnaged("ContactList");
              }    
     }

Plz让我知道它是否有效......