0

我有一个 Observable Collection,我正在尝试将其绑定到 ItemsControl。以下是我的代码片段。

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

4

2 回答 2

0

这应该有效。

在代码隐藏中:

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}"/>
于 2012-07-04T10:22:19.260 回答
0

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

于 2017-07-04T11:59:42.050 回答