带有DataTemplate的WPF可编辑ComboBox的SelectedItem问题

时间:2009-09-07 11:57:37

标签: wpf combobox wpf-controls datatemplate selecteditem

我在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错误吗?这都是我的错吗?

请帮助

1 个答案:

答案 0 :(得分:0)

我已向MSDN WPF Forum提交了相同的问题,这似乎是微软的错误。 我找到了一个解决方法,丑陋,但它正在发挥作用。这是修改后的代码:

    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()才能解决此问题。