Привязка ComboBox.SelectedItem - PullRequest
       12

Привязка ComboBox.SelectedItem

1 голос
/ 27 июля 2011

У меня есть этот столбец / код в моей 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 (по умолчанию) и отображает пустое поле.

Есть что-то, чего мне не хватает? Как необходимо настроить привязку, чтобы можно было установить SelectedItem по умолчанию в выпадающем списке в CellEditingTemplate?

Большое спасибо заранее!

Ответы [ 2 ]

3 голосов
/ 27 июля 2011

Я думаю, что проблема может заключаться в двухстороннем связывании для ItemsSource.

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

Я предлагаю изменить его на OneTime или OneWay в зависимости от вашего дизайна.

2 голосов
/ 27 июля 2011

Я могу ошибаться, но я думаю, что если вы используете SelectedValuePath, вам нужно использовать SelectedValue вместо SelectedItem, поэтому измените это:

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

к этому:

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