2016-02-04 65 views
0

首先我使用MVVM light toolkit來構建我的Windows應用商店應用程序。所以datacontext將在ViewModelLocator中設置。 我試圖綁定Hub控件頭部的按鈕命令。 下面是XAML我的代碼有按鈕:命令綁定在MVVM light toolkit中不起作用[5.2.0]對於windows store應用程序

<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> 

下面是我打電話給上面的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> 

以下是我的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應用程序中,我可以毫無問題地調用命令。

+0

由於你必須在數據模板中綁定命令,我認爲你必須使用相對的源屬性 –

回答

0

在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> 

基本上標籤地產股重要的作用,而結合。

1

這應該讓你去。

Command="{Binding SignIn,RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type Hub}}} 
+0

如果這是你所需要的,不要忘記標記爲answer.Thanks;) –

+0

已經嘗試與AncestorType&我是在'RelativeSource'類型中找不到'屬性'AncestorType'「。在Windows Store/Phone應用程序中,Ancestortype屬性不可用。 – OmiH

+0

終於得到了解決方案在以下鏈接:http://stackoverflow.com/questions/15366609/how-to-access-parents-datacontext-in-window-8-store-apps – OmiH