无法将observablecollection绑定到ItemsControl

时间:2012-07-04 09:51:44

标签: c# wpf

我有一个Observable Collection,我试图绑定到ItemsControl。以下是我的代码中的代码段。

Class Sample.ViewModel:

//Observabale collection getter/setter property
public ObservableCollection<SQuestion> SList
{
    get
    {             
        return _sList;
    }
    set
    {
        if (_sList == value)
            return;
        _sList = value;
        if(PropertyChanged!=null)
            PropertyChanged(this, new PropertyChangedEventArgs("ListOfSamples"));
    }
}

.xaml代码:
查看/ Mainwindow.xaml

<ItemsControl Height="422" HorizontalAlignment="Left" Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top" Width="751" ItemsSource="{Binding SList}" ItemTemplate="{StaticResource perItemTemplate}"/>

在上面的代码中,我指定了ItemsSource Binding但是在运行我的应用程序时,列表没有出现在ItemsControl中,并且所有内容都显示为空白:
但是,如果我尝试将来自我的.cs代码隐藏的源列表分配给listBox1.ItemsSource = SList,则列表框将填充并按预期工作。
有人可以指出上面的问题是什么,我正在做的Binding,以便我可以直接绑定xaml而不使用代码隐藏?

2 个答案:

答案 0 :(得分:0)

这应该有用。

在CodeBehind中:

public void MyInitialization()
{
    listBox1.DataContext = SList;
}

//Observabale collection getter/setter property
public ObservableCollection<SQuestion> SList 
{ 
    get 
    {              
        return _sList; 
    } 
    set 
    { 
        if (_sList == value) 
            return; 
        _sList = value; 
        if(PropertyChanged!= null)
            PropertyChanged(this, new PropertyChangedEventArgs("SList")); 
    } 
}

在Xaml中:

<ItemsControl Height="422" HorizontalAlignment="Left"
              Margin="12,12,0,0" Name="listBox1" VerticalAlignment="Top"
              Width="751" ItemsSource="{Binding} 
              ItemTemplate="{StaticResource perItemTemplate}"/>

答案 1 :(得分:0)

您在VM中的属性名称为SList,但您正在使用不同的名称升级PropertyChange:PropertyChanged(this, new PropertyChangedEventArgs("ListOfSamples"));。将其替换为PropertyChanged(this, new PropertyChangedEventArgs("SList"));并且应该是好的(假设VM正确连接)