【问题标题】:ComboBox.SelectedItem bindingComboBox.SelectedItem 绑定
【发布时间】:2011-10-14 10:13:24
【问题描述】:

我的 DataGrid 中有此列/代码:

<sdk:DataGridTemplateColumn CanUserReorder="True" CanUserResize="True" CanUserSort="True" Width="Auto" Header="Province/State">
                    <sdk:DataGridTemplateColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=SelectedProvince.ProvinceName, Mode=OneWay}"/>
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellTemplate>
                    <sdk:DataG  ridTemplateColumn.CellEditingTemplate>                        
                        <DataTemplate>
                            <ComboBox ItemsSource="{Binding Path=ProvinceList, Mode=TwoWay}"
                                      SelectedItem="{Binding Path=SelectedProvince, Mode=TwoWay}"
                                      DisplayMemberPath="ProvinceName" />
                        </DataTemplate>
                    </sdk:DataGridTemplateColumn.CellEditingTemplate>
                </sdk:DataGridTemplateColumn>

那么这是后面的代码(我已经剪掉了不相关的代码):

            public class BatchSeedingAddressVM : ViewModelBase
            {
                public BatchSeedingAddressVM()
                {
                    _saveAddressButtonCommand = new RelayCommand(SaveAddressButtonCommand_OnExecute);

                    CreateJurisdictionList();
                }

                public BatchSeedingAddressVM(int? batchSeedingAddressOID, string address1, string address2, string city, string postalCode, string province2Code)
                {
                    _saveAddressButtonCommand = new RelayCommand(SaveAddressButtonCommand_OnExecute);
                    CreateJurisdictionList();

                    BatchSeedingAddressOID = batchSeedingAddressOID;
                    Address1 = address1;
                    Address2 = address2;
                    City = city;
                    PostalCode = postalCode;
                    //SelectedProvince2Code = province2Code;
                    SelectedProvince = _provinceList.Where(x => x.Province2Code == province2Code).FirstOrDefault();
                }


                private ObservableCollection<Province> _provinceList = new ObservableCollection<Province>();
                public ObservableCollection<Province> ProvinceList
                {
                    get
                    {
                        return _provinceList;
                    }
                    set
                    {
                        if (_provinceList != value)
                        {
                            _provinceList = value;
                            RaisePropertyChanged("ProvinceList");
                        }
                    }
                }

        private Province _selectedProvince;
        [Display(Name = "Province")]
        public Province SelectedProvince
        {
            get
            {
                return _selectedProvince;
            }
            set
            {
                if (_selectedProvince != value && value != null)
                {
                    _selectedProvince = value;                            
                    RaisePropertyChanged("SelectedProvince");                        
                }
            }
        }
        }

问题是:DataGrid 单元格有 2 个模板:CellTemplate 和 CellEditingTemplate。当 CellTemplate 处于活动状态时,其中的文本框会按计划选择 SelectedProvince 并显示该省的名称。问题是当 CellEditingTemplate 变为活动状态时,其中的 ComboBox 不会获取(默认)SelectedItem 值并显示一个空框。

我有什么遗漏吗?如何设置绑定,以便可以在 CellEditingTemplate 的组合框中设置默认的 SelectedItem?

非常感谢!

【问题讨论】:

  • 我已经删除了 SelectedValuePath="Province2Code" 这行,以免混淆任何人。
  • +1 将 ItemsSource 的模式设置为 OneWay - 已修复! =)) 谢谢!我认为你应该把它作为一个答案。

标签: c# silverlight silverlight-4.0 mvvm mvvm-light


【解决方案1】:

我可能是错的,但我认为如果你使用SelectedValuePath,你需要使用SelectedValue而不是SelectedItem,所以改变这个:

SelectedItem="{Binding Path=SelectedProvince, Mode=TwoWay}"

到这里:

SelectedValue="{Binding Path=SelectedProvince, Mode=TwoWay}"

【讨论】:

    【解决方案2】:

    我认为 ItemsSource 的 TwoWay 绑定可能是问题所在。

    ItemsSource="{Binding Path=ProvinceList, Mode=TwoWay}"

    我建议根据您的设计将其更改为OneTimeOneWay

    【讨论】:

      猜你喜欢
      • 2010-10-25
      • 1970-01-01
      • 2010-10-26
      • 2012-07-19
      • 2018-07-27
      • 2011-01-13
      • 1970-01-01
      • 2012-06-17
      • 1970-01-01
      相关资源
      最近更新 更多