我正在使用MVVM Cross来构建UWP应用程序。我无法将命令绑定到按钮。以前在XAML页面中,我使用交互性来绑定其他命令。这里的问题是我们使用listview来呈现用户的“收藏列表”。 UnfavoriteCommand位于ViewModel中但从未被命中,因为User.Favorite列表位于模型中且没有“UnfavoriteCommand”。如何使用MVVM Cross处理此绑定问题?
<ListView
Grid.Row="0"
Grid.Column="0"
CanReorderItems="True"
CanDrag="True"
AllowDrop="True"
ItemsSource="{Binding User.FavoriteList}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="500" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<StackPanel Grid.Column="0" Grid.Row="0"
HorizontalAlignment="Left"
Margin="0, 0, 0, 0"
Height="25" >
<TextBlock Text="{Binding Description, Mode=TwoWay}"
VerticalAlignment="Center"
TextAlignment="Left"/>
</StackPanel>
<StackPanel VerticalAlignment="Center" Grid.Column="1" Grid.Row="0">
<Button Content=""
FontFamily="{StaticResource FontAwesomeFontFamily}"
BorderBrush="Black">
<Interactivity:Interaction.Behaviors>
<Core:EventTriggerBehavior EventName="Click">
<Core:EventTriggerBehavior.Actions>
<Core:InvokeCommandAction CommandParameter="{Binding}" Command="{Binding UnfavoriteCommand}"/>
<!--<Core:CallMethodAction TargetObject="{Binding}" MethodName="Unfavorite" />-->
<!--<Core:InvokeCommandAction Command="{Binding UnfavoriteCommand}" InputConverter="{StaticResource buttonConverter}"/>-->
</Core:EventTriggerBehavior.Actions>
</Core:EventTriggerBehavior>
</Interactivity:Interaction.Behaviors>
</Button>
</StackPanel>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
答案 0 :(得分:2)
为您的页面命名并使用ElementName绑定。
<Core:InvokeCommandAction CommandParameter="{Binding}" Command="{Binding DataContext.UnfavoriteCommand, ElementName=PageName}"/>
答案 1 :(得分:0)
此代码适用于wpf应用程序,但我认为它与UWP应用程序相同,您应该使用RelativeSource来引用不同的源或上下文,可能是您有一个ViewModel(仅限接口):
public class IAnyViewModel {
RelayCommand UnfavoriteCommand {get;}
ObservableCollection<UserFavorite> FavoriteList {get;set;}
}
这个类在构造函数中被分配给页面或窗口控件,或者通过代码分配给这样的东西:
public constructorControl(){
this.DataContext = new AnyViewModel();
}
或XAML。
<Page.DataContext>
<local:AnyViewModel></local:AnyViewModel>
</Page.DataContext>
然后你可以使用RelativeSource引用父上下文,如下所示:
<Core:InvokeCommandAction
Command="{Binding UnfavoriteCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType={x:Type Page}}">
我假设你的控制权是 Page 。