vin*_*812 6 xaml eventtrigger mvvm windows-phone windows-phone-8
当ViewModel中出现触发器时,我遇到了一个问题,SelectedItem(参数)来自之前选择的Item.我需要新选择的项目作为selectionChanged的参数.
我是WP8的新手.下面是代码
<toolkit:ListPicker Header="Background"
ExpansionMode="FullscreenOnly"
Template="{StaticResource ListPickerControlTemplate}"
VerticalAlignment="Top"
ItemsSource="{Binding Path=Buildings.ObjectList}"
Margin="0"
x:Name="buldings"
Padding="0">
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=BuildingSelectionCommand}"
CommandParameter="{Binding Path=SelectedItem, ElementName=buldings}" />
</i:EventTrigger>
</i:Interaction.Triggers>
Run Code Online (Sandbox Code Playgroud)
谢谢Vinod
通常,您应该将当前的 SelectionItem 作为参数传递给您的命令。由于该事件是用过去时态编写的,因此您应该获取当前的 SelectedItem 而不是之前的 SelectedItem。
您可以尝试的是将 SelectedItem 的绑定添加到 ListPicker 并省略将 SelectedItem 作为参数传递给 Command。
<toolkit:ListPicker SelectedItem="{Binding SelectedBuilding, Mode=TwoWay}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="SelectionChanged">
<i:InvokeCommandAction Command="{Binding Path=BuildingSelectionCommand}"/>
</i:EventTrigger>
</i:Interaction.Triggers>
</toolkit:ListPicker>
Run Code Online (Sandbox Code Playgroud)
然后,您的命令需要访问属性 SelectedBuilding 才能执行
public class BuildingSelectionCommand{
// a reference to your ViewModel that contains the SelectedBuilding-Property
public BuildingsViewModel ViewModel {
get;
set;
}
public bool CanExecute(object parameter) {
return ViewModel.SelectedBuilding != null;
}
public void Execute(object parameter){
var selectedItem = ViewModel.SelectedBuilding;
// execute command logic with selectedItem
}
}
Run Code Online (Sandbox Code Playgroud)
您这边的代码可能有所不同,因为它取决于您如何实现 ViewModel 和 Command,但我认为您应该得到它。
另一种不使用 EventTrigger 的 方法是直接在 SelectedBuilding-Property 中执行命令。
public Building SelectBuilding{
get {
return _selectedBuilding
}
set{
_selectedBuilding = value;
RaisePropertyChanged("SelectedBuilding");
if (BuildingSelectionCommand.CanExecute(_selectedBuilding)) {
BuildingSelectionCommand.Execute(_selectedBuilding);
}
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
1715 次 |
| 最近记录: |