0

私はWPFに比較的慣れていないので、VMMV環境内で比較的一般的なシナリオのように見えることに固執しています。これは、コンボボックスのデータコンテキストの設定を中心にしています。

私はビューモデルを持っています

  • 文字列プロパティ
  • XmlDataProviderプロパティ。

私の計画では、XmlDataProviderを使用してコンボボックスアイテムにデータを入力し、文字列プロパティをコンボボックスのSelectedItemにバインドしました。

私のXAMLでは、トップレベルのグリッドがDataContextをViewModelとして設定します。グリッド内には、以下のように定義されたコンボボックスがあります

<ComboBox x:Name="CategoryCombo" HorizontalAlignment="Left" Height="30" 
Margin="54,70,0,0" VerticalAlignment="Top" Width="233"  
ItemsSource="{Binding XPath=/OccupationCategory/@name}" 
DataContext="{Binding myProvider}"/> 

リストは正しく入力されています。私の問題は、XmlDataProviderを正しく機能させるために、コンボボックスのDataContextをViewmodel内のXMLDataProviderプロパティにバインドする必要があることです。

私が見る限り、これは、SelectedItemをViewModel内のStringプロパティにバインドできないことを意味します。これには、Datacontextをビューモデルに戻す必要があります。

ノート。コンボボックス全体のdataContextをXmlDataProviderに設定する必要がない、XAMLのさまざまなバリエーションを試しましたが、どれも機能しませんでした。以下のXAMLは、リストへの入力に失敗しました。バインディングエラーから、この場合、データソースはXMLDataProviderではなくビューモデルを指しているように見えます

<ComboBox x:Name="CategoryCombo" HorizontalAlignment="Left" Height="30" 
Margin="54,70,0,0" VerticalAlignment="Top" Width="233"  
ItemsSource="{Binding myProvider, XPath=/OccupationCategory/@name}" /> 

どんな援助でも大歓迎です。

4

1 に答える 1

0

とにかく、DataContextだけにバインドする必要はありません。1つの方法は、グリッドdataContextにバインドすることです。

SelectedValue="{Binding ElementName=MyGrid, Path=DataContext.YourStringProperty}"
于 2012-11-18T07:53:07.067 に答える