This commit is contained in:
2023-08-03 11:59:30 +09:00
parent 1df85fe35b
commit b3d721afbb
9 changed files with 174 additions and 0 deletions

View File

@@ -0,0 +1,9 @@
<Application x:Class="CommandSample.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-namespace:CommandSample"
StartupUri="MainWindow.xaml">
<Application.Resources>
</Application.Resources>
</Application>

View File

@@ -0,0 +1,17 @@
using System;
using System.Collections.Generic;
using System.Configuration;
using System.Data;
using System.Linq;
using System.Threading.Tasks;
using System.Windows;
namespace CommandSample
{
/// <summary>
/// Interaction logic for App.xaml
/// </summary>
public partial class App : Application
{
}
}

View File

@@ -0,0 +1,10 @@
using System.Windows;
[assembly: ThemeInfo(
ResourceDictionaryLocation.None, //where theme specific resource dictionaries are located
//(used if a resource is not found in the page,
// or application resource dictionaries)
ResourceDictionaryLocation.SourceAssembly //where the generic resource dictionary is located
//(used if a resource is not found in the page,
// app, or any theme specific resource dictionaries)
)]

View File

@@ -0,0 +1,10 @@
<Project Sdk="Microsoft.NET.Sdk">
<PropertyGroup>
<OutputType>WinExe</OutputType>
<TargetFramework>net6.0-windows</TargetFramework>
<Nullable>enable</Nullable>
<UseWPF>true</UseWPF>
</PropertyGroup>
</Project>

View File

@@ -0,0 +1,41 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Input;
namespace CommandSample.Commands
{
internal class MessageCommand : ICommand
{
private Action<string> _execute;
private Predicate<string> _canExecute;
public event EventHandler? CanExecuteChanged
{
add { CommandManager.RequerySuggested += value; }
remove { CommandManager.RequerySuggested -= value; }
}
public MessageCommand(Action<string> execute, Predicate<string> canExecute)
{
_execute = execute;
_canExecute = canExecute;
}
public bool CanExecute(object? parameter)
{
bool result = _canExecute.Invoke(parameter as string);
return result;
}
public void Execute(object? parameter)
{
if (_execute == null)
return;
_execute.Invoke(parameter as string);
}
}
}

View File

@@ -0,0 +1,20 @@
<Window x:Class="CommandSample.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:CommandSample"
xmlns:vm="clr-namespace:CommandSample.ViewModels"
mc:Ignorable="d"
Title="MainWindow" Height="300" Width="300">
<Window.DataContext>
<vm:MessageViewModel/>
</Window.DataContext>
<StackPanel>
<TextBox x:Name="tbMain"/>
<Button Content="Click"
Command="{Binding DisplayMessageCommand}"
CommandParameter="{Binding ElementName=tbMain, Path=Text}"/>
</StackPanel>
</Window>

View File

@@ -0,0 +1,28 @@
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
namespace CommandSample
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
}
}
}

View File

@@ -0,0 +1,33 @@
using CommandSample.Commands;
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows;
namespace CommandSample.ViewModels
{
internal class MessageViewModel
{
public MessageCommand DisplayMessageCommand { get; set; }
public MessageViewModel()
{
this.DisplayMessageCommand = new MessageCommand(DisplayMessage, AddMessage);
}
public void DisplayMessage(string param)
{
MessageBox.Show($"Clicked! (Param: {param})");
}
public bool AddMessage(string param)
{
if (string.IsNullOrEmpty(param))
return false;
return true;
}
}
}