C# WPF Tips

Windowsフォームプログラミング、WPFプログラミング゙のTipsを紹介します。極力、実務に役立つように作成しました


6.引数のあるボタン

戻る

引数のあるボタン

テキストボックスに入力した文字をメッセージボックスに表示する機能です。画面は下記の通りです。

起動時

クリックすると拡大します


下記がテキストボックスとボタンの定義です。Command(MethodName)はShowMessageBoxです。


View

<TextBox Text="{Binding Path=txtMessage, Mode=TwoWay}"  VerticalContentAlignment="Center" 
	Foreground="White" Background="Black" Height="24" HorizontalAlignment="Left" Margin="66,104,0,0"  VerticalAlignment="Top" Width="270" />

<Button Content="引数のあるボタン"  Margin="66,178,0,0" Foreground="White" FontSize="16" Height="35"
		Style="{StaticResource CommandTemplate}" VerticalAlignment="Top" HorizontalAlignment="Left" Width="270">
	<i:Interaction.Triggers>
		<i:EventTrigger EventName="Click">
			<l:LivetCallMethodAction MethodName="ShowMessageBox" MethodTarget="{Binding}" MethodParameter="{Binding txtMessage}" />
		</i:EventTrigger>
	</i:Interaction.Triggers>
</Button>

ViewModelは下記の通りです。


ViewModel

using System;

// ObservableCollection
using System.Collections.Generic;
using System.Linq;

//INotifyPropertyChanged
//PropertyChanged
using System.ComponentModel;

//参照設定が必要
//using System.Configuration;

using Livet;
using Livet.Commands;
using Livet.Messaging;
//CloseCommand
using Livet.Messaging.Windows;



//using Livet.Messaging.IO;
//using Livet.EventListeners;


//ICommand
using System.Windows.Input;

//MessageBox
using System.Windows;

// ListCollectionView
using System.Windows.Data;

using LivetWPFChromeHelpDesk1.Views;
using LivetWPFChromeHelpDesk1.ViewModels;

namespace LivetWPFChromeHelpDesk1.ViewModels
{
    class ViewModel11 : ViewModel
    {
        #region 変更通知プロパティ
        //-----------------------------------------------
        //public string txtMessage { get; set; }
        private string _txtMessage;
        public string txtMessage
        {
            get { return _txtMessage; }
            set
            {
                _txtMessage = value;
                RaisePropertyChanged("txtMessage");
            }
        }
        //
        private string _txtSearchInquiry;
        public string txtSearchInquiry
        {
            get { return _txtSearchInquiry; }
            set
            {
                if (_txtSearchInquiry != value)
                {
                    _txtSearchInquiry = value;
                    RaisePropertyChanged("txtSearchInquiry");
                }
            }
        }
        //
        public string txt本日 { get; set; }
        public bool IsEnabled { get; set; }

        //    public string txtTitle2 { get; set; }

        private string _txtTitle2;
        public string txtTitle2
        {
            get { return _txtTitle2; }
            set
            {
                _txtTitle2 = value;
                RaisePropertyChanged("txtTitle2");
            }
        }
        //-----------------------------------------------
        #endregion

        Window win = null;
               public ViewModel11()
        {
            Loaded = new Livet.Commands.ListenerCommand<Window>((w) =>
            {
                if (NeedHideOwner && w.Owner != null && w.Owner.Visibility == Visibility.Visible)
                {
                    win = w;
                    //w.Owner.Hide();
                }
            });
            //Initialize()では表示されない
            txt本日 = Convert.ToString(DateTime.Today.ToShortDateString());
        }
        public bool NeedHideOwner { get; set; }
        public ICommand Loaded { get; private set; }
        public ICommand Closing { get; private set; }

        public void Initialize()
        {
            if (win != null) win.Owner.Hide();
        }

        public void ShowMessageBox(string value)
        {
            // ViewのMethodParameterを受け取る
            MessageBox.Show(value);
        }

        #region CloseCommand
        private ViewModelCommand _CloseCommand;
        public ViewModelCommand CloseCommand
        {
            get
            {
                if (_CloseCommand == null)
                {
                    _CloseCommand = new ViewModelCommand(Close);
                }
                return _CloseCommand;
            }
        }
        public void Close()
        {
            var window = Application.Current.Windows.OfType<Window>().SingleOrDefault((w) => w.IsActive);
            window.Close();
        }
        #endregion
    }
}