使用 DataTemplate 的 WPF 可编辑组合框的 SelectedItem 问题

发布于 2024-08-04 05:57:27 字数 1114 浏览 3 评论 0原文

我在使用 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...我不期望任何所选项目...

我怀疑它与禁用搜索的组合框有关并且可编辑,但我不确定问题是什么。

我找到了一个解决方法:在绑定到 DataContextContentControl 上调用 UpdateLayout(),但它很难看。

这是 WPF 错误吗?都是我的错吗?

请帮忙

I’m having the following issue with 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>

Code behind:

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

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

I open the window and get ComboBox, bounded to my data model, I select some item (e.g. 1), all is dandy.

I change the data context to a new data model – the selected item is (to my surprise) 1... Where I don't expect any selected item...

I suspect it has something to do with the combo box which search disabled and editable, but I’m not sure what was the problem.

I found a work around: call UpdateLayout() on the ContentControl bounded to the DataContext, but it’s ugly.

Is that WPF bug? Is it all my fault?

Please Help

如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。

扫码二维码加入Web技术交流群

发布评论

需要 登录 才能够评论, 你可以免费 注册 一个本站的账号。

评论(1

自我难过 2024-08-11 05:57:27

我已向 MSDN WPF 论坛,这似乎是 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() 才能解决此问题。

I've submitted the same question to MSDN WPF Forum and it seems like a Microsoft bug.
There's a workaround I found, ugly, but it's working. Here's the modified code behind:

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

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

Note that both setting the DataContext to null and calling UpdateLayout() on DataContextChanged are needed to solve this issue.

~没有更多了~
我们使用 Cookies 和其他技术来定制您的体验包括您的登录状态等。通过阅读我们的 隐私政策 了解更多相关信息。 单击 接受 或继续使用网站,即表示您同意使用 Cookies 和您的相关数据。
原文