0

以下に示すように、ItemTemplateを使用するComboBoxがあります。どういうわけか、アイテムテンプレートで定義されたテキストボックスのTextプロパティがバインディングから切断され、選択したアイテムが変更されると更新が停止します。

ComboBox.ItemsSourceは、CatheterDefinitionオブジェクトのリストであるDependencyPropertyにバインドされています。ComboBox.SelectedItemは、単一のCatheterDefinitionオブジェクトであるDependencyPropertyにバインドされています。

<ComboBox
  AutomationProperties.AutomationId="CatheterInfoModelFieldID"
  VerticalAlignment="Center" HorizontalAlignment="Stretch"
  ItemsSource="{x:Static PumpAndCatheter:CatheterInfoViewModel.CatheterModelDefinitions}"
  SelectedItem="{Binding ElementName=UserControl, Path=ViewModel.SelectedCatheterModel, Mode=TwoWay, NotifyOnSourceUpdated=True}"
  SourceUpdated="HandleModelSourceUpdated">
  <ComboBox.ItemContainerStyle>
    <!-- A style used to set the AutomationID based on the item goes here -->
  </ComboBox.ItemContainerStyle>
  <ComboBox.ItemTemplate>
    <DataTemplate>
      <!-- This line below is the location of the problem -->
      <TextBlock Text="{Binding Converter={StaticResource CatheterModelDefinitionToStringConverter}}">
        <!-- A style used to set the AutomationID based on the item goes here -->
      </TextBlock>
    </DataTemplate>
  </ComboBox.ItemTemplate>
</ComboBox>

非常に奇妙な動作を生成する自動テストがあります(コードの初期開発中に同じ動作を数回見ましたが、手動で再現できませんでした)-これを再現するテストでは、ComboBoxからアイテムを選択してからアプリケーションの別の部分に移動し、この変更をデータモデルに保存するためのアクションを実行します。テストがこのComboBoxを使用して画面に戻ると、ComboBoxから別の項目を選択しようとします。SelectedItemが変更され、バインドされている値が変更されますが、ComboBox内のテキストは変更されません-どういうわけか、テキストボックスのTextプロパティへのバインドが壊れています(または何か)...バインドは引き続き実行されます(選択が変更されてもコンバーターは実行され、正しい値に変換されます)が、textプロパティが更新されることはありません。

考え?(これは巨大なアプリケーションであり、私が知っている1つのテストでしか再現できないため、この例を提供することはできません)

4

1 に答える 1

0

ほとんどの場合、バインドが壊れているのは、OnPropertyChanged("PropName") メソッドを呼び出さない (または正しく呼び出さない) ことが原因です。

根本的な実装を見なくても、これが問題の原因である可能性が最も高いと言えます。

于 2010-07-14T16:14:32.970 に答える