我在使用 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()
on the ContentControl
限制于DataContext
,但是很丑。
这是 WPF 错误吗?都是我的错吗?
请帮忙
我已经提交了同样的问题MSDN WPF 论坛 http://social.msdn.microsoft.com/Forums/en-US/wpf/thread/ccd68362-7d5c-4167-b2ec-325b28a1df4d这似乎是微软的一个错误。
我发现了一个解决方法,虽然丑陋,但它有效。这是修改后的代码:
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() 才能解决此问题。
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)