Mvvm-Light用户控件RelayCommand TemplateBinding

时间:2016-09-13 21:46:34

标签: c# xaml user-controls uwp mvvm-light

  

[UWP - Windows 10]

我是MVVM-Light的新手,因此我遇到了一些启动问题。我创建了一个名为gsub("(.*).{2}$","\\1",postcodes) 的自定义Usercontrol,其中包含此xaml:

TileToolbar

现在我想为每个RadioButton添加 <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

  • 我的第一个方法是在xaml中设置RelayCommand属性并在viewmodel中实现该方法(例如Command)实际工作 - 缩短xaml:MainViewModel
  • 因为我想使用customcontrol 在页面中设置Propery 这样<RadioButton Command="{Binding Command}"></RadioButton>我创建了一个类型为RelayCommand的依赖项属性,但TemplateBinding不起作用。

所以我的问题: 如何在UserControl中创建类型<TileToolbar PinCommand={Binding Command}></TileToolbar>的{​​{1}}属性,以便稍后可以在xaml中绑定到PinCommand

1 个答案:

答案 0 :(得分:2)

  

所以我的问题是:如何在UserControl中创建类似RelayCommand类型的PinCommand属性,以便稍后可以在xaml中绑定到它,例如在Mainpage上?

您可以在PinCommand代码后面的RelayCommand类型中注册UserControl,例如:

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);
    }
}

现在,您可以在TileToolbar中使用此MainPage,例如:

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

对于将Command RadioButton PinCommand连接到TileToolBar <RadioButton Tag="&#xEB52;" Foreground="Green" Command="{x:Bind PinCommand, Mode=OneWay}"></RadioButton> 的工作,您可以在用户控件中执行以下示例代码:

{{1}}