2013-07-31 74 views
0

我有以下类代码,如何使用绑定在组合框中显示默认值?

我在xaml中有一个coobobox。我想将它与这个类绑定。 下面的代码使组合框包含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"/> 

回答

1

我猜你不想要的唯一项目来源,但组合框的选择结合也是对你很重要,所以你想在视图模型添加选择也。有两种方法:

  1. 在ReadData类上添加SelectedTypeData属性,其类型为字符串。将ComboBox的SelectedItem绑定到SelectedTypeData。然后在ReadData对象的初始化中,您可以将SelectedTypeData分配默认值作为ComboBox上的默认选择。

  2. 在类型为ICollectionView的ReadData类上添加TypeDataListView属性。它可能需要你的TypeDataList是一个List。它可以通过调用CollectionViewSource.GetDefaultView(...)来生成。您可以将其CurrentItem属性指定为默认选择,并将Combobox的IsSynchronizedWithCurrentItem属性赋值为true,以便可以将ComboBox的selecteditem与TypeDataListView的CurrentItem同步。

如果你不想上添加视图模型的选择,你可以在后面的代码添加Loaded事件并在处理程序手动分配组合框的选择项。

+0

你的意思是我必须将我的字符串[]转换为ICollectionView?没有ICollectionView,这是不可能的?我使用.NET 4.我没有CollectionViewSource类。 – SHRI

+1

.Net 4内置了CollectionViewSource。您可以保留字符串[],但您需要添加一个属性来绑定ListBox的SelectedItem。看到我的第一点。 –

+0

对不起,是的。 .NET 4有CollectionViewSource类。我根据你的帖子更新。但是,仍然显示默认选择的项目。我在这里错过了什么吗? – SHRI