【发布时间】:2020-01-13 19:09:05
【问题描述】:
这是我在 Caliburn.Micro 中使用 WPF 的项目。在我看来,我有一个 ItemsControl 绑定到记录类 (MemberVotes) 的对应 ViewModel 中的 BindableCollection。该类只有两个字段:MemberName 和 Vote。 ViewModel 还具有第二个字符串类型的 BindableCollection (VoteOptions)。 ViewModel 中的 Handle 方法将数据加载到两个 BindableCollections 中。 MemberVotes 是从数据库中加载的,而 VoteOptions 则是通过代码添加一个新的字符串集合来加载的。
我可以毫无问题地在文本框中显示 MemberName 和 Vote,但我无法让 ComboBox 绑定投票选项的集合。没有错误消息。组合框只是空的。
如何将 ComboBoxes 绑定到 VoteOptions,然后将每个 ComboBox 的选定项目设置为 Vote?
任何帮助将不胜感激。
视图(MemberVoteView):
<ItemsControl x:Name="MemberVotes">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="4*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<TextBox Text="{Binding MemberName}" Grid.Column="0" IsReadOnly="True" />
<ComboBox Grid.Column="1" ItemsSource="{Binding RelativeSource={RelativeSource AncestorType=ItemsControl}, Path=DataContext.MemberVoteView.VoteOptions}" />
<TextBox Grid.Column="2" Text="{Binding Vote}" />
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
ViewModel (MemberVoteViewModel):
public BindableCollection<MemberVoteModel> MemberVotes { get; set; }
public BindableCollection<string> VoteOptions { get; set; }
public void Handle()
{
MemberVotes = new BindableCollection<MemberVoteModel>();
MemberVotes .AddRange(GetVotes());
VoteOptions = new BindableCollection<string>();
VoteOptions.AddRange( new string[] { "Y", "N", "NV", "E", "O"} );
}
【问题讨论】:
标签: wpf combobox binding caliburn.micro itemscontrol