【问题标题】:Problem with SelectedItem of WPF Editable ComboBox with DataTemplate带有 DataTemplate 的 WPF 可编辑组合框的 SelectedItem 问题
【发布时间】:2009-09-07 11:57:36
【问题描述】:

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

请帮忙

【问题讨论】:

    标签: wpf combobox wpf-controls datatemplate selecteditem


    【解决方案1】:

    我已经向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() 来解决此问题。

    【讨论】:

      猜你喜欢
      • 2011-09-24
      • 2014-04-27
      • 1970-01-01
      • 1970-01-01
      • 2012-12-16
      • 2011-09-23
      • 2013-11-03
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多