我有一个组合框控件。我从数据库中获取组合框值。我有Id和姓名。但我只在组合框中绑定了Name。我想要的是, 1.如果我在Combobox中选择任何名称,我需要在我的数据库中保存相应的ID。现在我能够绑定数据库中的值并在Combobox中显示名称。但是当我在组合框中选择任何值并尝试保存均值时,它会在ID上显示空值。这是我的代码。请帮我找一些解决方案。 Xaml:
<ComboBox x:Name="cb_rentaltype" HorizontalAlignment="Left" Margin="150,5,0,0" VerticalAlignment="Top" Height="35" Width="200"
SelectedValue="{Binding MasterRentalType}"
DisplayMemberPath="RentalTypeName"
SelectedValuePath="RentalTypeId" />
我的代码背后:
var status = new MasterRentalType();
List<MasterRentalType> listRentalType =
status.Get<MasterRentalType>() as
List<MasterRentalType>;
cb_rentaltype.ItemsSource = listRentalType;
我希望将Id绑定到Data上下文。这是代码,
private void FacilityDataBind()
{
cb_rentaltype.DataContext = ??
}
注意:MasterRentalType是我获取值的表。我有ID和名称值。
public class MasterRentalType : EntityBase
{
public string RentalTypeId {get; set;}
public string RentalTypeName {get; set;}
}
如何绑定并保存id值?
答案 0 :(得分:1)
您的问题是由于您将ComboBox.SelectedValue
属性绑定到MasterRentalType
属性的数据而造成的,我认为该属性属于MasterRentalType
类型,但您设置了SelectedValuePath
属于RentalTypeId
的财产。所以你说*让SelectedValue
使用string RentalTypeId
属性,然后将MasterRentalType
数据绑定到它。
有许多解决方案。更正您的示例,您应该尝试这样做:
<ComboBox x:Name="cb_rentaltype" HorizontalAlignment="Left" Margin="150,5,0,0"
SelectedValue="{Binding MasterRentalType.RentalTypeId}"
DisplayMemberPath="RentalTypeName"
SelectedValuePath="RentalTypeId" />
或者,您可以这样做:
<ComboBox x:Name="cb_rentaltype" HorizontalAlignment="Left" Margin="150,5,0,0"
SelectedItem="{Binding MasterRentalType}"
DisplayMemberPath="RentalTypeName" />
要了解有关差异的更多信息,请查看MSDN上的How to: Use SelectedValue, SelectedValuePath, and SelectedItem页面。
答案 1 :(得分:1)
有几种方法可以实现这一目标。其中一个在下面实现:
xaml应如下所示:
<ComboBox x:Name="cb_rentaltype" HorizontalAlignment="Left" Margin="150,5,0,0"
ItemsSource="{Binding MasterRentalTypeColl, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
SelectedItem="{Binding SelectedMasterRentalType, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}"
DisplayMemberPath="RentalTypeName">
</ComboBox>
MasterRentalType
类:
public class MasterRentalType : EntityBase, INotifyPropertyChanged
{
private string _RentalTypeId;
private string _RentalTypeName;
public string RentalTypeId
{
get { return _RentalTypeId; }
set
{
_RentalTypeId = value;
NotifyPropertyChanged("RentalTypeId");
}
}
public string RentalTypeName
{
get { return _RentalTypeName; }
set
{
_RentalTypeName = value;
NotifyPropertyChanged("RentalTypeName");
}
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
模型类:
public class MasterRentalModel: INotifyPropertyChanged
{
private MasterRentalType _SelectedMasterRentalType;
private List<MasterRentalType> _MasterRentalTypeColl = new List<MasterRentalType>();
public MasterRentalType SelectedMasterRentalType
{
get { return _SelectedMasterRentalType; }
set
{
_SelectedMasterRentalType = value;
NotifyPropertyChanged("SelectedMasterRentalType");
}
}
public List<MasterRentalType> MasterRentalTypeColl
{
get { return _MasterRentalTypeColl; }
set { _MasterRentalTypeColl = value; }
}
#region INotifyPropertyChanged Members
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(String propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
#endregion
}
在代码隐藏中,您只需要将模型分配给ComboBox的DataContext
;你可以实现这个任何其他功能(这里我已经在Loaded
的{{1}}事件的事件处理程序中实现了它:
Window
每当用户更改选择时,private void Window_Loaded(object sender, RoutedEventArgs e)
{
MasterRentalModel masterRentalModel = new MasterRentalModel();
// Fill the list of RentalType here
masterRentalModel.MasterRentalTypeColl.Add(new MasterRentalType() { RentalTypeId = "1", RentalTypeName = "Monthly" });
masterRentalModel.MasterRentalTypeColl.Add(new MasterRentalType() { RentalTypeId = "2", RentalTypeName = "Quarterly" });
masterRentalModel.MasterRentalTypeColl.Add(new MasterRentalType() { RentalTypeId = "1", RentalTypeName = "Yearly" });
cb_rentaltype.DataContext = masterRentalModel;
}
都会更新。在SelectedMasterRentalType
中,您可以同时获得SelectedMasterRentalType
和RentalTypeId
。如果您遵循正确的绑定,您的模型将始终更新;这是WPF的精髓。
希望这会有所帮助。