将单击操作绑定到自定义xaml组件

时间:2016-06-15 16:08:59

标签: c# xaml winrt-xaml

我在XAML中有以下自定义控件:

<Button x:Name="button" HorizontalAlignment="Left" Margin="0,0,0,0" VerticalAlignment="Center" Width="200">
        <StackPanel Orientation="Horizontal" Width="170">
            <TextBlock Text="&#xE188;" FontFamily="Segoe UI Symbol" Visibility="{Binding isFolder, Converter={StaticResource BooleanToVisibilityConverter}}"/>
            <TextBlock Text="&#xE113;" FontFamily="Segoe UI Symbol" Foreground="Gold" Visibility="{Binding isFolder, Converter={StaticResource InverseBooleanToVisibilityConverter}}"/>
            <TextBlock Text="{Binding title}" Margin="5,0" Foreground="Black"/>
        </StackPanel>

我想在isFolder上绑定点击操作。所以我创建了一个xaml页面,在后面的代码中我添加了控件如下:

        MyControl item = new MyControl();
        item.DataContext = context;
        // item.click += context.isFolder ? folderAction : nonFolderAction

没有item.click。如何根据布尔值将委托添加到click?

1 个答案:

答案 0 :(得分:2)

您可以使用relay命令,您可以在执行命令时指定条件。

例如:(在您的情况下)

在你的viewmodel中:(执行此操作)

    private RelayCommand myCommandInViewModel;

    public RelayCommand MyCommandInViewModel
    {
        get { return myCommandInViewModel?? (myCommandInViewModel= new RelayCommand(myCommandInViewModelAction,()=> { return isFolder; })); }
    }

其中myCommandInViewModelAction包含您的方法定义。

以上是建议的做法。 否则,您可以使用button.Click事件的其他方式获取发件人的datacontext并检查其中的isFolder属性。

private void someClickEvent(object sender, RoutedEventArgs e)
    {
     var buttonDataContext = (sender as Button).DataContext;
     if(buttonDataContext.isFolder)
     {
       doSomeThing();
     }
     else
     {
     return;
    }
    }