2016-09-13 82 views
0

[UWP - 視窗10]MVVM光強用戶控制RelayCommand TemplateBinding

我是新來的MVVM光強,所以我得到了一些首發的問題。我創建了被稱爲TileToolbar並含有此XAML一個自定義的用戶控件:

<StackPanel Orientation="Horizontal" HorizontalAlignment="Center"> 
    <RadioButton Style="{StaticResource NavRadioButtonStyle}" Tag="&#xE141;" Foreground="Green"></RadioButton> 
    <RadioButton Style="{StaticResource NavRadioButtonStyle}" Tag="&#xE7E6;" Foreground="Green"></RadioButton> 
    <RadioButton Style="{StaticResource NavRadioButtonStyle}" Tag="&#xEB52;" Foreground="Green"></RadioButton> 
</StackPanel> 

現在我想添加一個RelayCommand每個單選按鈕,我想每一個被包含自定義用戶控件,能夠綁定一個自定義頁面RelayCommand

  • 我的第一種方法是設置Command屬性,XAML和落實在視圖模型方法(如MainViewModel)的實際工作 - 縮短XAML:<RadioButton Command="{Binding Command}"></RadioButton>
  • 因爲我想設置屬性格式的頁面使用自定義控件像這樣<TileToolbar PinCommand={Binding Command}></TileToolbar>我創建了一個類型爲RelayCommand的依賴項屬性,但TemplateBinding不起作用。

所以我的問題: 我怎麼會在用戶控件創建一個類似RelayCommand類型的PinCommand的屬性,所以我可以在以後給它綁定在XAML例如在Mainpage

回答

1

所以我的問題:如何在UserControl中創建一個類似於CommandCommand的類型爲CommandCommand的屬性,以便稍後在xaml中將它綁定到主頁上?

您可以在UserControl的代碼背後例如像這樣登記的RelayCommand的類型PinCommand

public static DependencyProperty PinCommandProperty = DependencyProperty.Register("PinCommand", typeof(RelayCommand), typeof(TileToolbar), new PropertyMetadata(null)); 

public RelayCommand PinCommand 
{ 
    get 
    { 
     return (RelayCommand)GetValue(PinCommandProperty); 
    } 
    set 
    { 
     SetValue(PinCommandProperty, value); 
    } 
} 

現在你可以在你的MainPage使用TileToolbar例如像這樣:

<Controls:TileToolbar Grid.Row="1" VerticalAlignment="Bottom" PinCommand="{Binding pinCommand, Mode=OneWay}" /> 

代碼在視圖模型是這樣的:

private RelayCommand _pinCommand; 

public RelayCommand pinCommand 
{ 
    get 
    { 
     if (_pinCommand == null) 
     { 
      _pinCommand = new RelayCommand(() => 
      { 
       //TODO: 
      }, 
      () => true); 
     } 
     return _pinCommand; 
    } 
} 

併爲RadioButtonCommand連接的TileToolBarPinCommand的工作,可以在例如像這樣的代碼用戶控件:

<RadioButton Tag="&#xEB52;" Foreground="Green" Command="{x:Bind PinCommand, Mode=OneWay}"></RadioButton>