[英]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. 我建议根据您的设计将其更改为
OneTime
或OneWay
。
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.