0

MVVMでWPFを使用しています。問題は、Model クラスに、PersonID、Name、Job の 3 つのプロパティが含まれているということです。View Model にはPersonクラスが含まれています。ビューにはComboBoxforが含まれており、エンジニア、弁護士、医師などJobを使用して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: Engineer" が表示され、これを修正する方法が表示されます。ありがとう

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が であり、それがタイプになることを意味するアイテムstringを定義し、1つのWPFを選択すると、この場合は を呼び出すことを意味する変換を行うことです。つまり、データです。上記の例では、プレゼンテーション用に WPF によってラップされる文字列の配列に設定しますが、型になりますComboBoxComboBoxItemSelectedItemComboBoxItemToString()ItemsSourceComboBoxItemSelectedItemstring

于 2013-05-26T20:40:46.773 に答える
0

Person の変更が通知されたときに、コンボボックスのバインディングへの変更を通知します。

PSコードで答える方が簡単でしょう。

于 2013-05-26T18:51:19.523 に答える