无法在两个组合框和主窗口之间建立关系

时间:2016-06-30 14:34:35

标签: c# wpf xaml combobox

我有StackPanel,其中包含ComboBox

<ComboBox x:Name="comboMeetingWeek" ItemsSource="{Binding Meetings}"
    DisplayMemberPath="DateMeetingAsText"
    SelectedItem="{Binding Meeting, UpdateSourceTrigger=PropertyChanged}">
</ComboBox>

窗口绑定到名为DataContext的{​​{1}}。因此,在上面的ComboBox中,它绑定到会议属性。项目列表的类型均为会议(来自列表)。

再向下我有OCLMEditorModelView

ComboBox

因为它我的名字出现在我的组合中:

<ComboBox x:Name="comboChairman" IsEditable="True"
          SelectedItem="{Binding Chairman, UpdateSourceTrigger=PropertyChanged}"
          ItemsSource="{Binding Students, ConverterParameter={x:Static local:OtherPrivileges.Chairman}, Converter={StaticResource StudentPrivilegeConvertor}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"
          SelectedValuePath="Students"
          DisplayMemberPath="Name"/>

我认为这是正确的,因为对于组合,其DataContext仍然是主要的ItemsSource="{Binding Students, ConverterParameter={x:Static local:OtherPrivileges.Chairman}, Converter={StaticResource StudentPrivilegeConvertor}, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}" 。因此,它会找到学生列表并使用名称填充它。好。

但是这一点失败了:

OCLMEditorModelView

主席是会议财产的成员。并且Meeting属性绑定到组合的SelectedItem。所以我有一个问题。

  

OCLMEditorModelView.Meetings

     

OCLMEditorModelView.Meetings.Meeting

     

OCLMEditorModelView.Meetings.Meeting.Chairman

     

OCLMEditorModelView.Students

     

OCLMEditorModelView.Students.Name

SelectedItem="{Binding Chairman, UpdateSourceTrigger=PropertyChanged}"

此外,由于这些组合框是可编辑的,因此名称可能不是列表中的实际项目。所以它必须是一个价值。

更新:我想要实现的目标是什么?

Main Window (OCLMEditorModelView) DateCombo (Meetings (property of OCLMEditorModelView instance)) SelectedItem (Meeting (property of Meetings instance) NamesCombo ItemsSource (Students (property of OCLMEditorModelView instance)) SelectedItem (Chairman (property of the aforementioned Meeting instance. 包含一堆comboMeetingWeek项。

当您选择会议项目时,窗口上的控件现在应显示会议项目所包含的值。所以我想将主席组合值映射到会议项目中的主席文本属性。

但主席组合内容是根据学生名单建立的。

1 个答案:

答案 0 :(得分:0)

我设法弄清楚如何使用IDE中的弹出对话框来帮助我正确构建我的XAML。

我还意识到当我应该绑定到绑定到ViewModel的另一个属性中的属性时,我意外地在ComboBox中创建了属性。

所以主要的ComboBox现在是:

<ComboBox x:Name="comboMeetingWeek"
          ItemsSource="{Binding Meetings}"
          SelectedItem="{Binding Meetings/, UpdateSourceTrigger=PropertyChanged}"
          DisplayMemberPath="DateMeetingAsText">
</ComboBox>

其内容绑定到Meeting对象中的属性的所有其他控件如下所示:

<ComboBox Name="comboChairman"
      ItemsSource="{Binding Students, ConverterParameter={x:Static local:OtherPrivileges.Chairman}, Converter={StaticResource StudentPrivilegeConvertor}}"
      DisplayMemberPath="Name"
      Text="{Binding SelectedItem.Chairman, 
             ElementName=comboMeetingWeek, UpdateSourceTrigger=PropertyChanged}"
             IsEditable="True"/>

所以Students列表是正确的,因为主席ComboBox仍然有主窗口 DataContext

ComboBoxText)中保存的值现在正确绑定到正确的项目!