0

我有一个 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 中的源属性设置为“C46”。谁能告诉我做错了什么?

4

3 回答 3

1

您提到您的 ViewModel 中有一个源集合。所以,为什么要在XAML中一一指定ComboBoxItems呢?我认为您应该在 ViewModel 中有一个 Collection of 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"/>
于 2012-08-02T19:26:07.493 回答
0

我遵循相同的方法,并且在屏幕加载时显示“C46”。但是,VM 将显示System.Windows.Controls.ComboBoxItem: C46而不是C46因为您没有使用SelectedValuePath来指定绑定值路径

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

于 2012-08-02T19:23:34.713 回答
-2

// 看法

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

// 视图模型

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");

            }
        }
于 2015-10-29T18:55:18.023 回答