3

WPF で次の問題が発生していますComboBox

XAML:

<Window.Resources>
  <ResourceDictionary>
    <DataTemplate DataType="{x:Type this:Data}">

      <ComboBox IsTextSearchEnabled="False" IsEditable="True" 
                Text="{Binding Value}" ItemsSource="{Binding Menu}"/>

    </DataTemplate>
  </ResourceDictionary>
</Window.Resources>

<StackPanel>
  <ContentControl Content="{Binding}"/>
  <Button Click="ChangeData_Click">Change Data</Button>
</StackPanel>

コードビハインド:

public Window1()
{
    InitializeComponent();
    DataContext = new Data();
}

void ChangeData_Click(object sender, RoutedEventArgs e)
{
    DataContext = new Data();
}

ウィンドウを開き、ComboBoxデータ モデルにバインドされた を取得し、いくつかの項目 (たとえば 1) を選択すると、すべてうまくいきます。

データ コンテキストを新しいデータ モデルに変更します。選択されたアイテムは (驚いたことに) 1 です... 選択されたアイテムはないと思います...

検索が無効で編集可能なコンボボックスと関係があると思われますが、何が問題なのかわかりません。

私は回避策を見つけました:境界のある を呼び出しますUpdateLayout()が、それは醜いです。ContentControlDataContext

それはWPFのバグですか?それはすべて私のせいですか?

助けてください

4

1 に答える 1

0

同じ質問をMSDNWPFフォーラムに送信しましたが、Microsoftのバグのようです。醜い、私が見つけた回避策がありますが、それは機能しています。変更されたコードは次のとおりです。

    public Window1()
    {
        InitializeComponent();
        DataContext = new Data();
        DataContextChanged += delegate { contentControl.UpdateLayout(); };
    }

    void ChangeData_Click(object sender, RoutedEventArgs e)
    {
        DataContext = null;
        DataContext = new Data();
    }

この問題を解決するには、DataContextをnullに設定することと、DataContextChangedでUpdateLayout()を呼び出すことの両方が必要であることに注意してください。

于 2009-09-10T04:43:56.550 に答える