我在课后面有以下代码,
我在xaml中有一个cobobox。我想用这个类绑定它。 下面的代码使组合框包含2个项目“任意”和“可配置”
但是当我运行应用程序时,组合框是空的。 未选择默认值。 怎么做到这个?
public class ReadData:INotifyPropertyChanged
{
private string typeData="Arbitrary";
private string[] typeDataList={"Arbitrary", "Configurable"};
private ICollectionView typeDataList;
public string[] TypeDataList
{
get
{
return typeDataList;
}
set
{
typeDataList=value;
NotifyProertyChanged("TypeDataList");
}
}
public string TypeData
{
get
{
return typeData;
}
set
{
typeData=value;
NotifyPropertyChanged("TypeData");
}
public ICollectionView TypeDataListView
{
get
{
typeDataListView=CollectionViewSource.GetDefaultView(typeDataList);
return typeDataListView;
}
set
{
typeDataListView=value;
//typeDataList= ???
}
}
XAML文件
<ComboBox ItemSource={Binding TypeDataListView}" IsSynchronizedWithCurrentItem="True" SelectedItem="{Binding typeData}" Height="23" Width="120"/>
答案 0 :(得分:1)
我想你不想只绑定项目源,但选择组合框对你也很重要,所以你也想在视图模型上添加选择。有两种方法:
在ReadData类上添加SelectedTypeData属性,其类型为string。将ComboBox的SelectedItem绑定到SelectedTypeData。然后在ReadData对象的初始化中,您可以将SelectedTypeData的默认值指定为ComboBox上的默认值。
在ReadData类上添加TypeDataListView属性,其类型为ICollectionView。它可能需要您的TypeDataList是一个List。它可以通过调用CollectionViewSource.GetDefaultView(...)生成。您可以将其CurrentItem属性指定为默认选择,并将Combobox的IsSynchronizedWithCurrentItem属性指定为true,这样您就可以将combobox的selecteditem与TypeDataListView的CurrentItem同步。
如果您不想在视图模型上添加选择,可以在代码后面添加一个Loaded事件,并在处理程序中手动分配组合框的选定项目。