我将WPF与MVVM一起使用。问题是我有Model类说Person包含三个属性PersonID,Name,Job。视图模型包含Person
类。视图包含ComboBox
的{{1}},我使用Job
在XAML中输入静态值,说工程师,律师,医生:现在我需要绑定到ComboBoxItem
的组合框当视图显示某个人并且能够输入/更改作业以及要提交给人的新值时显示该人的工作的属性(即我想在MS Access表单中使用类似那样的组合框)
提前致谢。
这里是Person.Job
ComboBox
作业在组合框中正确显示,但在保存新值或修改值时,我在数据库中获取“System.Windows.Controls.ComboBoxItem:Engineer”如何更正此问题。 感谢
答案 0 :(得分:3)
假设Person.Job
是string
,没有ID,并且您希望保持作业列表的静态,请尝试设置ComboBox
,如下所示:
<ComboBox SelectedItem="{Binding Path=Job, Mode=TwoWay}">
<ComboBox.ItemsSource>
<x:Array Type="sys:String" xmlns:sys="clr-namespace:System;assembly=mscorlib">
<sys:String>Engineer</sys:String>
<sys:String>Lawyer</sys:String>
<sys:String>Doctor</sys:String>
</x:Array>
</ComboBox.ItemsSource>
</ComboBox>
问题在于,您的Job
是string
,而您将ComboBox
项定义为ComboBoxItem
,这意味着SelectedItem
属于ComboBoxItem
ToString()
类型,当您选择一个WPF时会执行转换,在这种情况下意味着调用ItemsSource
,因此您的数据。在上面的示例中,您将ComboBoxItem
设置为由SelectedItem
中的WPF包装以进行演示的字符串数组,但string
将为{{1}}类型
答案 1 :(得分:0)
当通知对Person的更改时,通知更改组合框上的绑定。
PS用代码回答会更容易。
答案 2 :(得分:0)
您可以通过此方法轻松处理静态绑定
Xaml代码
<ComboBox HorizontalAlignment="Left" VerticalAlignment="Top" SelectedItem="{Binding PaymentType}" Width="150" Grid.Column="1" Margin="50,4,0,0" Grid.Row="9">
<ComboBox.Items>
<ComboBoxItem Content="Cash Payment" />
<ComboBoxItem Content="Cheque Payment" />
</ComboBox.Items>
</ComboBox>
查看型号代码
private System.Windows.Controls.ComboBoxItem _PaymentType;
public System.Windows.Controls.ComboBoxItem PaymentType
{
get
{
return _PaymentType;
}
set
{
_PaymentType = value;
RaisedPropertyChanged("PaymentType");
}
}
现在您可以使用变量 PaymentType 作为
string output = PaymentType.Content.ToString();