我有一个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而不使用代码隐藏?
答案 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正确连接)