命令绑定在适用于 Windows 应用商店应用的 MVVM 轻型工具包 [5.2.0] 中不起作用
本文关键字:应用 工具包 不起作用 轻型 MVVM 适用于 绑定 Windows 命令 | 更新日期: 2023-09-27 18:33:12
首先,我使用MVVM轻量级工具包来构建我的Windows应用商店应用程序。因此,数据上下文将在 ViewModelLocator 中设置。我正在尝试绑定集线器控件标头中的按钮的命令。这是我来自 XAML 的代码,它有按钮:
<DataTemplate x:Key="DataTemplate10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="700"/>
<ColumnDefinition Width="800"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="user trading terminal"
Width="Auto"
Height="70"
Grid.Column="0"/>
<Button Content="sign in" Grid.Column="1"
Width="Auto"
HorizontalAlignment="Right" Command="{Binding SignIn}"/>
</Grid>
</DataTemplate>
下面是我在上面的数据模板中调用的中心控件的 XAML 代码:
<Hub Header="user trading terminal" HeaderTemplate="{StaticResource DataTemplate10}">
<Hub.Background>
<ImageBrush Stretch="Fill" ImageSource="ms-appx:///Assets/HubImages/BackGround.jpg"/>
</Hub.Background>
<HubSection Header="indices" Width="500" ContentTemplate="{StaticResource DataTemplate1}" x:Name="indicesSection"/>
<HubSection Header="market movers" Width="530" ContentTemplate="{StaticResource DataTemplate4}"/>
<HubSection Header="commodities" Width="500" ContentTemplate="{StaticResource DataTemplate6}"/>
<HubSection Header="currency" Width="500" ContentTemplate="{StaticResource DataTemplate8}"/>
</Hub>
以下是我的视图模型的代码:
public class ApplicationHubViewModel : ViewModelBase
{
private RelayCommand<object> _signIn;
/// <summary>
/// Gets the IndicesTap.
/// </summary>
public RelayCommand<object> SignIn
{
get
{
return _signIn
?? (_signIn = new RelayCommand<object>((t) => SignInProcess(t)));
}
}
private void SignInProcess(Object t)
{
IsPopUpOpen = true;
IsHubControlEnabled = false;
}
}
谁能告诉我为什么我无法调用按钮的命令?是因为我使用的是 MVVM 轻量级工具包 5.2.0。因为通常在简单的 WPF 应用程序中,我能够毫无问题地调用命令。
这应该让你继续前进。
Command="{Binding SignIn,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Hub}}}
在Datatemplete中,按钮应该有以下用于命令绑定的代码:
<DataTemplate x:Key="DataTemplate10">
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="700"/>
<ColumnDefinition Width="800"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock Text="user trading terminal"
Width="Auto"
Height="70"
Grid.Column="0"/>
<Button Content="sign in" Grid.Column="1"
Width="Auto"
HorizontalAlignment="Right" Command="{Binding Tag.SignIn, ElementName=mainContainer}"/>
</Grid>
</DataTemplate>
元素名称应为顶级元素的名称。就我而言,我将内容控件作为集线器上方的顶级元素。
<Hub Header="user trading terminal" HeaderTemplate="{StaticResource DataTemplate10}">
<Hub.Background>
<ImageBrush Stretch="Fill" ImageSource="ms-appx:///Assets/HubImages/BackGround.jpg"/>
</Hub.Background>
<HubSection Header="indices" Width="500" ContentTemplate="{StaticResource DataTemplate1}" x:Name="indicesSection"/>
<HubSection Header="market movers" Width="530" ContentTemplate="{StaticResource DataTemplate4}"/>
<HubSection Header="commodities" Width="500" ContentTemplate="{StaticResource DataTemplate6}"/>
<HubSection Header="currency" Width="500" ContentTemplate="{StaticResource DataTemplate8}"/>
</Hub>
</ContentControl>
基本上,Tag 属性在绑定时起着重要作用。