简体   繁体   English

ComboBox.SelectedItem绑定

[英]ComboBox.SelectedItem binding

I have this column/code in my DataGrid: 我的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>

Then this is the code behind(I have cut out the unrelated code): 然后这是背后的代码(我已经剪掉了不相关的代码):

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

Here is the issue: the DataGrid cell has 2 templates: CellTemplate and CellEditingTemplate. 这是问题所在:DataGrid单元具有2个模板:CellTemplate和CellEditingTemplate。 When the CellTemplate is active the textbox in it picks up the SelectedProvince as planned and displays the name of the province. 当CellTemplate处于活动状态时,其中的文本框将按计划选择SelectedProvince,并显示省名。 The problem is that when CellEditingTemplate becomes active the ComboBox in it does not pick up the (default)SelectedItem value and displays an empty box. 问题在于,当CellEditingTemplate变为活动状态时,其中的ComboBox不会拾取(默认)SelectedItem值并显示一个空框。

Is there something I am missing? 我有什么想念的吗? How the binding has to be setup so that it would be possible to set the default SelectedItem in the combobox in CellEditingTemplate? 如何设置绑定,以便可以在CellEditingTemplate的组合框中设置默认的SelectedItem?

Thanks much in advance! 在此先感谢!

I think TwoWay binding for ItemsSource can be the problem. 我认为用于ItemsSource的TwoWay绑定可能是问题。

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

I suggest to change it to OneTime or OneWay depending on your design. 我建议根据您的设计将其更改为OneTimeOneWay

I might be wrong, but I think that if you're using SelectedValuePath , you need to use SelectedValue instead of SelectedItem , so change this: 我可能是错的,但是我认为如果您使用的是SelectedValuePath ,则需要使用SelectedValue而不是SelectedItem ,因此请更改以下内容:

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

to this: 对此:

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM