首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >为什么我的ComboBox SelectedItem为空?

为什么我的ComboBox SelectedItem为空?
EN

Stack Overflow用户
提问于 2011-09-01 04:46:15
回答 1查看 5.3K关注 0票数 0

我有一个WPF/MVVM (使用MVVM)应用程序设置,其中有一个ComboBox,它位于DataTemplate内部。ComboBox的XAML如下所示:

代码语言:javascript
代码运行次数:0
运行
复制
<ComboBox x:Name="cbTeachers" 
          Grid.Column="1" 
          Style="{StaticResource ComboBox}" 
          ItemsSource="{Binding Teachers}" 
          Grid.Row="3" 
          DisplayMemberPath="Name" 
          SelectedValuePath="Id" 
          IsSynchronizedWithCurrentItem="False" 
          SelectedItem="{Binding Path=SelectedTeacher}">
     <i:Interaction.Triggers>
          <i:EventTrigger EventName="SelectionChanged">
               <i:InvokeCommandAction Command="{Binding TeacherSelectedCommand}"
                                      CommandParameter="{Binding SelectedItem, ElementName=cbTeachers}" />
          </i:EventTrigger>
     </i:Interaction.Triggers>
</ComboBox>

教师属性ItemsSource是一个名为ObservableRangeCollection的类型,它基于这里找到的代码:http://geekswithblogs.net/NewThingsILearned/archive/2008/01/16/have-worker-thread-update-observablecollection-that-is-bound-to-a.aspx,但它非常类似于标准ObservableCollection。SelectedTeacher属性是在设置另一个属性时设置的,代码看起来非常类似于此:

代码语言:javascript
代码运行次数:0
运行
复制
this.SelectedTeacher = (from t in this.Teachers where t.Id == this.DataItem.Teacher.Id select t).Single();

我遇到的问题(对我来说毫无意义)是,一旦我设置了SelectedTeacher,它就会被重置为空。我可以通过调试器看到SelectedTeacher有一个值,并且当我为属性在setter上放置一个断点时,它肯定有这个值。但是,该属性将再次以空值被击中。我检查了调用堆栈,它显示了唯一的前一行为外部代码(这是有意义的,因为我只在一个地方设置了该属性,并且它只按预期被击中一次)。扩展调用堆栈窗口中的外部代码选项将显示典型的WPF调用堆栈,可能有40种方法,因此它肯定是WPF的内部,而不是我正在做的使其重置的事情。实际上,当我移除SelectedItem=“{}”时,该属性的设置器不会被第二次调用(因此它保留了它的值),但是ComboBox当然也不会显示所选的项。我尝试在我的视图模型中实现一个SelectedIndex选项,但这也不起作用。ComboBox只是不选择项目。我可以在ComboBox中更改所选的项,但是初始设置不会被接受。

有什么想法吗?基于我搜索的所有内容,它可能与我使用DataTemplate相关,但我必须这样做,因为该模板是父ContentTemplateSelector实现的一部分。

另外,我有多个属性绑定到这个DataTemplate中的控件,这是唯一一个不能工作的属性。其他的都工作得很好。我也尝试过带有和不带"IsSynchronizedWithCurrentItem“标志的IsSynchronizedWithCurrentItem,这并没有什么区别。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2011-09-01 05:27:09

你有没有试过移除EventTrigger的东西,只想使用

代码语言:javascript
代码运行次数:0
运行
复制
SelectedItem="{Binding Path=SelectedTeacher, Mode=TwoWay}"

和Mode=TwoWay?

我不清楚你想用你的EventTrigger实现什么?

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/7266215

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档