【发布时间】:2014-06-28 14:11:06
【问题描述】:
我有一个 Items 控件绑定到 TaskActivity 对象的可观察集合。
<ItemsControl ItemsSource="{Binding TasksActivities, UpdateSourceTrigger=PropertyChanged}" Margin="20, 0, 20, 20">
<ItemsControl.ItemTemplate>
<DataTemplate>
<Grid Margin="2, 0, 2, 0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width= "*" />
<ColumnDefinition Width= "*" />
<ColumnDefinition Width= "*" />
<ColumnDefinition Width= "70"/>
</Grid.ColumnDefinitions>
<ComboBox x:Name="test" IsEditable="True" ItemsSource="{Binding Source={StaticResource Locator}, Path=Main.AvailableActivities, Mode=TwoWay}" SelectedValue="{Binding ActivityId}" Text="{Binding Name, UpdateSourceTrigger=LostFocus}" SelectedValuePath="Key" DisplayMemberPath="Value" HorizontalAlignment="Stretch" Grid.Column="0">
</ComboBox>
<TextBox Text="{Binding Length}" Grid.Column="1" />
<TextBox Text="{Binding Comment}" Grid.Column="2" />
<Button Height="24" Content="Remove" HorizontalAlignment="Right" Margin="10, 0, 10, 0" Style="{StaticResource LinkButton}" Grid.Column="3">
<i:Interaction.Triggers>
<i:EventTrigger EventName="Click">
<cmd:EventToCommand Command="{Binding Source={StaticResource Locator}, Path=Main.DeleteActivityCommand, Mode=OneWay}" CommandParameter="{Binding Name}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</Button>
</Grid>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
当在组合框中键入的值不存在并且焦点丢失时,我希望出现一个提示,询问他们是否要将该值添加到 AvailableActivities 列表(这只是一个字典)。现在边框只是变红了,虽然它确实更新了 OC 内对象的“名称”属性,但它不是真实的,因为它无法设置 ActivityId,因为它实际上并不存在于可用活动列表中。
我已经为 SelectionChanged 和 LostFocus 尝试了 EventToCommand,但是当输入一个新值时,我返回的值是“null”,所以我无法添加它。
通常我可以将文本值绑定到 VM 上的属性并在那里完成所有操作,但由于它是 TaskActivity 对象的 ObservableCollection 内的属性,我不确定这是否可能。
对于实现这个功能有什么建议吗?
【问题讨论】:
标签: c# wpf mvvm combobox mvvm-light