WPF可编辑ComboBox的SelectedItem存在问题,配合DataTemplate使用时。

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...我不希望有任何选定的项目...
我怀疑这与ComboBox搜索被禁用和可编辑有关,但我不确定问题出在哪里。
我找到了一个解决方法:在绑定到DataContext的ContentControl上调用UpdateLayout(),但这很丑陋。
这是WPF的错误吗?这都是我的错吗?
请帮忙。
1个回答

0

我已经在MSDN WPF论坛上提交了同样的问题,看起来是微软的一个bug。 我找到了一个丑陋的解决方法,但它确实有效。这是修改后的代码:

    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()。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接