Wpf 如何使用绑定在组合框中显示默认值?

Wpf 如何使用绑定在组合框中显示默认值?,wpf,xaml,data-binding,mvvm,Wpf,Xaml,Data Binding,Mvvm,我有下面的代码隐藏类 我有一个xaml中的COBOX。我想把它和这个类绑定在一起。 下面的代码使组合框包含两项“任意”和“可配置” 但是当我运行应用程序时,combobox是空的未选择任何默认值。 怎么做这个 public class ReadData:INotifyPropertyChanged { private string typeData="Arbitrary"; private string[] typeDataList={"Arbitrary", "Configu

我有下面的代码隐藏类

我有一个xaml中的COBOX。我想把它和这个类绑定在一起。 下面的代码使组合框包含两项“任意”和“可配置”

但是当我运行应用程序时,combobox是空的未选择任何默认值。 怎么做这个

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"/>

我猜您不希望只绑定源项,但组合框的选择对您也很重要,因此您希望在视图模型上添加选择。有两种方法:

  • 在ReadData类上添加类型为string的SelectedTypeData属性。将ComboBox的SelectedItem绑定到SelectedTypeData。然后,在ReadData对象的初始化过程中,可以为SelectedTypeData指定一个默认值作为ComboBox上的默认选择

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


  • 如果不想在视图模型上添加选择,可以在代码隐藏中添加已加载的事件,并在处理程序中手动分配combobox的选定项。

    您的意思是我必须将字符串[]转换为ICollectionView?如果没有ICollectionView,则无法执行以下操作?我正在使用.NET4。我没有CollectionViewSource类..Net 4内置了CollectionViewSource。您可以保留字符串[],但需要添加一个属性来绑定ListBox的SelectedItem。请看我的第一点。对不起,是的。NET 4具有CollectionViewSource类。我根据你的帖子更新了。但仍不显示默认选定项目。我是不是遗漏了什么?