public virtual void TwoExecute()
        {
            var vm = CommandTests_a.Create();
            var bt = BindingTestHelper.BindAssert <Button>("Button", "Command", "{b:DXCommand Execute='Do1(); Do2()'}", null, vm);

            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(1, vm.Do1Counter);
            Assert.AreEqual(1, vm.Do2Counter);
            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(2, vm.Do1Counter);
            Assert.AreEqual(2, vm.Do2Counter);

            vm = CommandTests_a.Create();
            bt = BindingTestHelper.BindAssert <Button>("Button", "Command", "{b:DXCommand Execute='Do1(); Do2()', CanExecute='CanDo1() &amp;&amp; CanDo2()'}", null, vm);
            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            Assert.AreEqual(2, vm.CanDo1Counter);
            Assert.AreEqual(0, vm.CanDo2Counter);
            vm.CanDo1Value = true;
            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            Assert.AreEqual(3, vm.CanDo1Counter);
            Assert.AreEqual(1, vm.CanDo2Counter);
            vm.CanDo2Value = true;
            Assert.AreEqual(true, BindingTestHelper.CanDoCommand(bt));
            Assert.AreEqual(4, vm.CanDo1Counter);
            Assert.AreEqual(2, vm.CanDo2Counter);
            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(1, vm.Do1Counter);
            Assert.AreEqual(1, vm.Do2Counter);
        }
        public virtual void CommandInDataTemplate()
        {
            string xaml  = @"
<Grid>
    <Grid.Resources>
        <DataTemplate x:Key=""temp"">
            <Button Command=""{b:DXCommand 'Method($test:BindingTests_a.StaticIntProp)'}""/>
        </DataTemplate>
    </Grid.Resources>
    <ContentControl Content=""{b:DXBinding}"" ContentTemplate=""{StaticResource temp}""/>
    <ContentControl Content=""{b:DXBinding}"" ContentTemplate=""{StaticResource temp}""/>
</Grid>
";
            var    panel = BindingTestHelper.LoadXaml <Grid>(xaml);

            BindingTestHelper.VisualTest(panel, () => {
                BindingTests_a.Static(2);
                var vm            = CommandTests_a.Create();
                var tb1           = LayoutTreeHelper.GetVisualChildren(panel.Children[0]).OfType <Button>().First();
                var tb2           = LayoutTreeHelper.GetVisualChildren(panel.Children[1]).OfType <Button>().First();
                panel.DataContext = vm;
                BindingTestHelper.DoEvents(panel);
                BindingTestHelper.DoCommand(tb1);
                Assert.AreEqual(1, vm.MethodCounter);
                BindingTestHelper.DoCommand(tb2);
                Assert.AreEqual(2, vm.MethodCounter);
            });
        }
        public void OneExecute()
        {
            var vm = CommandTests_a.Create();
            var bt = BindingTestHelper.BindAssert <Button>("Button", "Command", "{b:DXCommand Do1()}", null, vm);

            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(1, vm.Do1Counter);
            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(2, vm.Do1Counter);

            vm             = CommandTests_a.Create();
            vm.CanDo1Value = true;
            bt             = BindingTestHelper.BindAssert <Button>("Button", "Command", "{b:DXCommand Do1(), CanExecute='CanDo1()'}", null, vm);
            Assert.AreEqual(1, vm.CanDo1Counter);

            vm = CommandTests_a.Create();
            bt = BindingTestHelper.BindAssert <Button>("Button", "Command", "{b:DXCommand Do1(), CanExecute='CanDo1()'}", null, vm);
            Assert.AreEqual(1, vm.CanDo1Counter);
            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            Assert.AreEqual(2, vm.CanDo1Counter);
            Assert.AreEqual(0, vm.Do1Counter);
            vm.CanDo1Value = true;
            Assert.AreEqual(true, BindingTestHelper.CanDoCommand(bt));
            Assert.AreEqual(3, vm.CanDo1Counter);
            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(1, vm.Do1Counter);
        }
        public virtual void Arguments()
        {
            var vm = CommandTests_a.Create();
            var bt = BindingTestHelper.BindAssert <Button>("Button", "Command",
                                                           "{b:DXCommand Execute='Do3(@s.Tag.Parameter, @parameter);', CanExecute='CanDo3(@s.Tag.CanDo)'}", null, vm);

            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            bt.Tag = new { CanDo = true }; BindingTestHelper.DoEvents(bt);
            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            bt.Tag = new { CanDo = true, Parameter = 1 }; BindingTestHelper.DoEvents(bt);
            Assert.AreEqual(false, BindingTestHelper.CanDoCommand(bt));
            bt.CommandParameter = 1; BindingTestHelper.DoEvents(bt);
            Assert.AreEqual(true, BindingTestHelper.CanDoCommand(bt));
            BindingTestHelper.DoCommand(bt);
            Assert.AreEqual(2, vm.Do3Value);
        }
        public virtual void CommandInStyleSetter()
        {
            string xaml1 = @"
<Grid>
    <Grid.Resources>
        <Style x:Key=""st"" TargetType=""Button"">
            <Setter Property=""Command"" Value=""{b:DXCommand Method($test:BindingTests_a.StaticIntProp)}""/>
        </Style>
    </Grid.Resources>
    <Button Style=""{StaticResource st}""/>
    <Button Style=""{StaticResource st}""/>
</Grid>
";
            string xaml2 = @"
<Grid>
    <Grid.Resources>
        <Style TargetType=""Button"">
            <Setter Property=""Command"" Value=""{b:DXCommand Method($test:BindingTests_a.StaticIntProp)}""/>
        </Style>
    </Grid.Resources>
    <Button/>
    <Button/>
</Grid>
";

            Action <string> test = xamlStr => {
                BindingTests_a.Static(2);
                var panel = BindingTestHelper.LoadXaml <Grid>(xamlStr);
                var tb1   = (Button)panel.Children[0];
                var tb2   = (Button)panel.Children[1];
                var vm    = CommandTests_a.Create();
                panel.DataContext = vm;
                BindingTestHelper.DoEvents(panel);
                BindingTestHelper.DoCommand(tb1);
                Assert.AreEqual(2, vm.MethodValue);
                BindingTests_a.Static(3);
                BindingTestHelper.DoCommand(tb2);
                Assert.AreEqual(3, vm.MethodValue);
            };

            test(xaml1);
            test(xaml2);
        }