使用 DataTemplate 的 WPF 可编辑组合框的 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...我不期望任何所选项目...
我怀疑它与禁用搜索的组合框有关并且可编辑,但我不确定问题是什么。
我找到了一个解决方法:在绑定到 DataContext
的 ContentControl
上调用 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 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(1)
我已向 MSDN WPF 论坛,这似乎是 Microsoft 的一个错误。
我发现了一个解决方法,虽然丑陋,但它有效。下面是修改后的代码:
请注意,需要将 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:
Note that both setting the DataContext to null and calling UpdateLayout() on DataContextChanged are needed to solve this issue.