在ComboBox中显示默认值

时间:2012-08-02 18:50:06

标签: wpf xaml

我有一个ComboBox,其XAML如下所示:

  <StackPanel Grid.Row = "0" Style="{DynamicResource chartStackPanel}">
        <Label    Content="Port:" HorizontalAlignment="Left" Margin="8,0,0,0"/>
        <ComboBox Width="75" Height="24" HorizontalAlignment="Right" Margin="8,0,0,0" SelectedValue="{Binding Port, Mode=OneWayToSource}">
            <ComboBoxItem Content="C43"/>
            <ComboBoxItem Content="C46" IsSelected="True"/>
            <ComboBoxItem Content="C47"/>
            <ComboBoxItem Content="C48"/>
        </ComboBox>
    </StackPanel>

上面引用的样式定义如下:

         

首次显示ComboBox时,我希望ComboBox中显示“C46”项。但是,加载时,ComboBox为空。有趣的是,我的VM中的source属性被设置为'C46'。谁能说出我做错了什么?

3 个答案:

答案 0 :(得分:1)

您提到ViewModel中有源集合。因此,为什么要在XAML中逐个指定ComboBoxItem?我认为你应该在ViewModel中有一个Items属性属性和SelectedItem属性。在构造函数中,您可以设置SelectedItem。它看起来如下:

public ObservableCollection<MyClass> Items { get;set; }

public MyClass SelectedItem
{
  get {return this.selectedItem;}
  set {
       this.selectedItem = value;
       RaisePropertyChanged("SelectedItem");
      }
}

在Items属性初始化之后的构造函数中:

this.SelectedItem = Items[x]

您的XAML可以如下所示:

<ComboBox Width="75" Height="24" HorizontalAlignment="Right" Margin="8,0,0,0" 
                      ItemsSource="{Binding Items}"
                      SelectedItem="{Binding Path=SelectedItem}"
                      DisplayMemberPath="Content"/>

答案 1 :(得分:0)

我按照相同的方式在屏幕加载时显示'C46'。 但是,由于您未使用 SelectedValuePath 来指定绑定值路径,因此VM将显示System.Windows.Controls.ComboBoxItem: C46而不是C46

我使用SelectedValuePath="Content"它会显示'C46'

答案 2 :(得分:-2)

//查看

<ComboBox x:Name="cbCategories" Width="300" Height="24" ItemsSource="{Binding Categories}"
DisplayMemberPath="CategoryName" SelectedItem="{Binding SelectedCategory}" />

// ViewModel

private CategoryModel _SelectedCategory;
        public CategoryModel SelectedCategory
        {
            get { return _SelectedCategory; }
            set
            {
                _SelectedCategory = value;
                OnPropertyChanged("SelectedCategory");
            }
        }

        private ObservableCollection<CategoryModel> _Categories;
        public ObservableCollection<CategoryModel> Categories
        {
            get { return _Categories; }
            set
            {
                _Categories = value;
                _Categories.Insert(0, new CategoryModel()
                {
                    CategoryId = 0,
                    CategoryName = " -- Select Category -- "
                });
                SelectedCategory = _Categories[0];
                OnPropertyChanged("Categories");

            }
        }