WPF组合框获取和设置数据

时间:2013-05-26 18:46:46

标签: wpf mvvm

我将WPF与MVVM一起使用。问题是我有Model类说Person包含三个属性PersonID,Name,Job。视图模型包含Person类。视图包含ComboBox的{​​{1}},我使用Job在XAML中输入静态值,说工程师,律师,医生:现在我需要绑定到ComboBoxItem的组合框当视图显示某个人并且能够输入/更改作业以及要提交给人的新值时显示该人的工作的属性(即我想在MS Access表单中使用类似那样的组合框) 提前致谢。 这里是Person.Job

的XAML代码
ComboBox

作业在组合框中正确显示,但在保存新值或修改值时,我在数据库中获取“System.Windows.Controls.ComboBoxItem:Engineer”如何更正此问题。 感谢

3 个答案:

答案 0 :(得分:3)

假设Person.Jobstring,没有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>

问题在于,您的Jobstring,而您将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();