命令绑定在 windows 商店应用程序的 MVVM light 工具包 [5.2.0] 中不起作用
Command binding is not working in MVVM light toolkit [5.2.0] for windows store app
首先,我使用 MVVM light 工具包来构建我的 Windows Store 应用程序。所以数据上下文将在 ViewModelLocator 中设置。
我正在尝试为 Hub 控件的 header 中的按钮绑定命令。
这是我来自 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>
这是我的 Hub Control 的 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>
以下是我的 ViewModel 代码:
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 light toolkit 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>
元素名称应该是顶级元素的名称。在我的例子中,我将 ContentControl 作为集线器上方的顶级元素。
<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>
基本上标签 属性 在绑定时起着重要作用。
首先,我使用 MVVM light 工具包来构建我的 Windows Store 应用程序。所以数据上下文将在 ViewModelLocator 中设置。 我正在尝试为 Hub 控件的 header 中的按钮绑定命令。 这是我来自 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>
这是我的 Hub Control 的 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>
以下是我的 ViewModel 代码:
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 light toolkit 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>
元素名称应该是顶级元素的名称。在我的例子中,我将 ContentControl 作为集线器上方的顶级元素。
<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>
基本上标签 属性 在绑定时起着重要作用。