2016年4月11日月曜日

DB表示ツールその2

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

DB表示ツール用その1

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

2016年3月14日月曜日

EventHandlerの使い方

【発行側】
public class class1
{
   public delegate void _MyEvent(object sender, MyEventArgs e);
   public event _MyEvent MyEvent;
   protected virtual void MyChangeEvent(MyEventArgs e)
   {
      if ( MyEvent != null )
      {
         MyEvent( this, e );
      }
   }
   private void Changed()
   {
      MyEventArgs e = new MyEventArgs( arg1, arg2 );
      MyChangeEvent(e);
   }
   public class MyEventArgs : EventArgs
   {
      public string Arg1;
      public int Arg2;
      ...
      public MyEventArgs (  string _Arg1, int _Arg2 )
      {
         Arg1 = _Arg1;
         Arg2 = _Arg2;
      }
   }
}
【受取側】
public class class2
{
   private void Define()
   {
      class1 obj = new class1();
      obj.MyEvent += new class1._MyEvent(RecieveEvent);
    }
   private void RecieveEvent( object sender, class1.MyEventArgs e)
   {
      Console.WriteLine(e.Arg1 + e.Arg2);
   }
}

2016年3月8日火曜日

Wpf細かい書式

毎回忘れる細かい書式

・.Resource内での宣言
<.Resource>
     <DataTemplate DataType="{x:Type [namespace]:[class]}" />
</.Resource>

・ListBoxへのBinding
要素が1つなら
 <ListBox ItemsSource="{Binding [List]}" DisplayMemberPath="[Listの要素]"/>

要素が複数かつ色々変えるなら
<ListBox ItemsSource="{Binding [List]}">
    <ListBox.ItemTemplate>
        <DataTemplate>
            <StackPanel>
                <TextBlock Text="{Binding [要素1]}"/>
                <TextBlock Text="{Binding [要素2]}"/>         
            </StackPanel>
         </DataTemplate>
    </ListBox.ItemTemplate>
</ListBox>

選択できなくて良いなら
<ItemsControl ItemsSource="{Binding [List]}">
    <ItemsControl.ItemTemplate>
        <DataTemplate>
            <Border Background="LightPink" CornerRadius="20">
                <TextBlock Margin="1">
                                <!--Run Text="要素1 : " FontSize="10"/-->
                                <Run Text="{Binding [要素1]}" FontSize="10"/>
                                <LineBreak/>
                                <Run Text="要素2 : "/>
                                <Run Text="{Binding [要素2]}"/>
                </TextBlock>
            </Border>
        </DataTemplate>
    </ItemsControl.ItemTemplate>
</ItemsControl>

・PropertyChangedの通知
public event PropertyChangedEventHandler PropertyChanged;

 private void NotifyPropertyChanged(string info)
 {
     if (PropertyChanged != null)
     {
         PropertyChanged(this, new PropertyChangedEventArgs(info));
     }
 }

PasswordBoxでデータバインド

【参考】http://garafu.blogspot.jp/2014/09/wcf-passwordbox.html
セキュリティの問題から基本的には非推奨
-----------------------

利用方法
<PasswordBox [namespace]:PasswordBoxHelper.Password = {Binding Target}/>


------------------------
【PasswordBoxHelper.cs】

namespace WpfPasswordBox
{
    using System.Windows;
    using System.Windows.Controls;
    public class PasswordBoxHelper : DependencyObject
    {
        public static readonly DependencyProperty IsAttachedProperty = DependencyProperty.RegisterAttached(
            "IsAttached",
            typeof(bool),
            typeof(PasswordBoxHelper),
            new FrameworkPropertyMetadata(false, PasswordBoxHelper.IsAttachedProperty_Changed));
        public static readonly DependencyProperty PasswordProperty = DependencyProperty.RegisterAttached(
            "Password",
            typeof(string),
            typeof(PasswordBoxHelper),
            new FrameworkPropertyMetadata(string.Empty, FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, PasswordBoxHelper.PasswordProperty_Changed));
        public static bool GetIsAttached(DependencyObject dp)
        {
            return (bool)dp.GetValue(PasswordBoxHelper.IsAttachedProperty);
        }
        public static string GetPassword(DependencyObject dp)
        {
            return (string)dp.GetValue(PasswordBoxHelper.PasswordProperty);
        }
        public static void SetIsAttached(DependencyObject dp, bool value)
        {
            dp.SetValue(PasswordBoxHelper.IsAttachedProperty, value);
        }
        public static void SetPassword(DependencyObject dp, string value)
        {
            dp.SetValue(PasswordBoxHelper.PasswordProperty, value);
        }
        private static void IsAttachedProperty_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var passwordBox = sender as PasswordBox;
            if ((bool)e.OldValue)
            {
                passwordBox.PasswordChanged -= PasswordBoxHelper.PasswordBox_PasswordChanged;
            }
            if ((bool)e.NewValue)
            {
                passwordBox.PasswordChanged += PasswordBoxHelper.PasswordBox_PasswordChanged;
            }
        }
        private static void PasswordBox_PasswordChanged(object sender, RoutedEventArgs e)
        {
            var passwordBox = sender as PasswordBox;
            PasswordBoxHelper.SetPassword(passwordBox, passwordBox.Password);
        }
        private static void PasswordProperty_Changed(DependencyObject sender, DependencyPropertyChangedEventArgs e)
        {
            var passwordBox = sender as PasswordBox;
            var newPassword = (string)e.NewValue;
            if (!GetIsAttached(passwordBox))
            {
                SetIsAttached(passwordBox, true);
            }
            if ((string.IsNullOrEmpty(passwordBox.Password) && string.IsNullOrEmpty(newPassword)) ||
                passwordBox.Password == newPassword)
            {
                return;
            }
            passwordBox.PasswordChanged -= PasswordBoxHelper.PasswordBox_PasswordChanged;
            passwordBox.Password = newPassword;
            passwordBox.PasswordChanged += PasswordBoxHelper.PasswordBox_PasswordChanged;
        }
    }
}

2016年2月29日月曜日

ViewModelBaseの代替?

【参考】http://zecl.hatenablog.com/entry/20091211/p1


 【IImpleNotifyPropertyChanged.cs】
using System;
using System.Linq;
using System.Linq.Expressions;
using System.ComponentModel;

namespace ClassLibrary1
{
    /// <summary>
    /// IImpleNotifyPropertyChangedインターフェイス
    /// 
    /// INotifyPropertyChangedの実装をある程度抽象化し、簡易な実装を提供します。
    /// </summary>
    public interface IImpleNotifyPropertyChanged : INotifyPropertyChanged
    {
        /// <summary>
        /// PropertyChangedの再定義
        /// (INotifyPropertyChangedのPropertyChangedを隠蔽する)
        /// </summary>
        new event PropertyChangedEventHandler PropertyChanged;

        /// <summary>
        /// PropertyChangedEventHandlerを取得します。
        /// </summary>
        PropertyChangedEventHandler PropertyChangedHandler { get; }
    }

    /// <summary>
    /// IImpleNotifyPropertyChangedインターフェイスについて拡張メソッド提供
    /// </summary>
    public static class IImpleNotifyPropertyChangedExtentions
    {
        /// <summary>
        /// プロパティの変更を通知します。
        /// </summary>
        /// <param name="self">対象</param>
        /// <param name="targets">プロパティ変更通知対象の名称群</param>
        private static void OnPropertyChanged<TObject>(this TObject self, params string[] propertyNames)
            where TObject : IImpleNotifyPropertyChanged
        {
            if (self == null) return;
            if (self.PropertyChangedHandler == null) return;

            foreach (var propertyName in propertyNames)
                self.PropertyChangedHandler(self, new PropertyChangedEventArgs(propertyName));
        }

        /// <summary>
        /// プロパティの変更を通知します。
        /// </summary>
        /// <typeparam name="TObject"></typeparam>
        /// <typeparam name="TExpression"></typeparam>
        /// <param name="self">対象</param>
        /// <param name="expressions">プロパティ変更通知対象の名称を取得するExpression群</param>
        public static void OnPropertyChanged<TObject, TExpression>(this TObject self, params Expression<Func<TObject, TExpression>>[] expressions)
            where TObject : IImpleNotifyPropertyChanged
        {
            var propertyNames = from e in expressions
                                select ((MemberExpression)e.Body).Member.Name;
            self.OnPropertyChanged(propertyNames.ToArray());
        }
    }

    /// <summary>
    /// INotifyPropertyChangedインターフェイスについて拡張メソッドを提供
    /// </summary>
    public static class INotifyPropertyChangedExtentions
    {
        /// <summary>
        /// プロパティ変更イベントの関連付け補助
        /// </summary>
        /// <typeparam name="TObject"></typeparam>
        /// <typeparam name="TExpression"></typeparam>
        /// <param name="self"></param>
        /// <param name="expressions"></param>
        /// <param name="handler"></param>
        public static void AddPropertyChanged<TObject, TExpression>(this TObject self, Expression<Func<TObject, TExpression>> expressions, Action<TObject> handler)
            where TObject : INotifyPropertyChanged
        {
            if (self == null) return;
            var propName = ((MemberExpression)expressions.Body).Member.Name;
            self.PropertyChanged += (sender, e) =>
            {
                if (e.PropertyName == propName)
                    handler(self);
            };
        }
    }
}

RelayCommand.cs

【参考】http://d.hatena.ne.jp/kaorun/20141202/1417532472
 ICommandの簡単実装
--------------------------
 ViewModel内で宣言
・宣言    
public ICommand Event_name { get; set; }
・コンストラクタで初期化
Event_name = new RelayCommand( Process_name );
・実処理は別に作成(簡単な処理ならlambdaで)       
public void Process_name(){
   処理内容;
 (例:インクリメント、メッセージボックス表示)
}
--------------------------
Common内で定義
【RelayCommand.cs】
using System;
using System.Windows.Input;
namespace Project.Common
{
    public class RelayCommand : ICommand
    {
        private readonly Action _execute;
        private readonly Func<bool> _canExecute;

        public event EventHandler CanExecuteChanged;

        public RelayCommand(Action execute) : this(execute, null)
        {
        }
        public RelayCommand(Action execute, Func<bool> canExecute)
        {
            if (execute == null)
                throw new ArgumentNullException("execute");
            _execute = execute;
            _canExecute = canExecute;
        }
        public bool CanExecute(object parameter)
        {
            return _canExecute == null ? true : _canExecute();
        }
        public void Execute(object parameter)
        {
            _execute();
        }
        public void RaiseCanExecuteChanged()
        {
            var handler = CanExecuteChanged;
            if (handler != null)
            {
                handler(this, EventArgs.Empty);
            }
        }

    }
}