0

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

<ComboBox ItemsSource="{Binding Person, UpdateSourceTrigger=PropertyChanged}" 
   SelectedValue="{Binding Path=Job, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
   SelectedValuePath="PersonID" 
   SelectedItem="{Binding Person.Job, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
   Width="50" Height="20" 
   Grid.Row="1" Grid.Column="2" 
   HorizontalAlignment="Left">
   <ComboBoxItem Content="Engineer"/>
   <ComboBoxItem Content="Lawyer"/>
   <ComboBoxItem Content="Doctor"/>
</ComboBox>

作业在组合框中正确显示,但是当保存新的或修改的值时,我在数据库中得到“System.Windows.Controls.ComboBoxItem:工程师”如何更正此问题。谢谢

4

3 回答 3

4

假设它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是 astring并且您将ComboBoxitems 定义为ComboBoxItem这意味着SelectedItem它将是一种ComboBoxItem类型,并且当您选择一个 WPF 时会进行转换,在这种情况下意味着调用ToString(),因此是您的数据。在上面的示例中,您设置ItemsSource为由 WPF 包装的字符串数组以ComboBoxItem进行演示,但SelectedItem将是一种string类型

于 2013-05-26T20:40:46.773 回答
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();
于 2014-06-26T13:21:20.793 回答
0

当通知 Person 的更改时,通知对组合框上的绑定的更改。

PS用代码回答会更容易。

于 2013-05-26T18:51:19.523 回答