Henehefu 用 ウィキ

メニュー



- Views

最近の更新

取得中です。

WPFメモ > 今日書いたコンバータ


※上記の広告は60日以上更新のないWIKIに表示されています。更新することで広告が下部へ移動します。


TitleCovnerter

ファイル名とアプリ名をタイトルにそれっぽく表示するコンバーター

ソース

// 
    public class TitleConverter : IValueConverter
    {
        public TitleConverter()
        {
            Title = string.Empty;
            Separator = " - ";
        }
 
        public string Title
        {
            get;
            set;
        }
 
        public string Separator
        {
            get;
            set;
        }
 
        #region IValueConverter メンバ
 
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            try {
                var text = value as string;
                var result =
                    (string.IsNullOrEmpty(text) ?
                    Title :
                    (text + Separator + Title));
                return result;
            }
            catch(Exception) {
                return DependencyProperty.UnsetValue;
            }
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
 
        #endregion
    }
 

使い方

<Window 
 xmlns:vm="clr-namespace:そこのアセンブリのビューモデルのパス"
 xmlns:cnv="clr-namespace:そこのアセンブリのコンバータのパス"
>
    <Window.Resources>
        <vm:Doc x:Key="doc"/>
        <cnv:TitleConverter x:Key="cnvTitle" Title="HogeViewer"/>
    </Window.Resources>
    <Window.Title>
        <Binding Path="Filename"
                 Source="{StaticResource doc}"
                 Converter="{StaticResource cnvTitle}" />
    </Window.Title>
 
</Window>

ChainConverter

コンバータをチェインしてつなげる。
あのコンバータを使って変換した値を、
そのコンバータを使って再度変換したいぜって時に使う。

ソース

// 
    [ContentProperty("Converters")]
    public class ChainConverter : IValueConverter
    {
        private delegate object ConvertFunc(object value, Type targetType, object parameter, CultureInfo culture);
        public ChainConverter()
        {
            Converters = new Collection<IValueConverter>();
        }
        #region IValueConverter メンバ
 
        public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Chain(value, targetType, parameter, culture, c => c.Convert);
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
        {
            return Chain(value, targetType, parameter, culture, c => c.ConvertBack);
        }
 
        #endregion
 
        private object Chain(object value, Type targetType, object parameter, CultureInfo culture, Func<IValueConverter, ConvertFunc> makeFunc)
        {
            var result = Converters.Aggregate(value, (v, c) => makeFunc(c)(v, targetType, parameter, culture));
            return result;
        }
 
 
        [DesignerSerializationVisibility(DesignerSerializationVisibility.Content)]
        public Collection<IValueConverter> Converters
        {
            get;
            private set;
        }
    }
 

使い方

<Binding >
	<!-- ... -->
	<Binding.Converter>
		<cnv:ChainConverter>
			<cnv:WinConverter/>
			<cnv:SandConverter/>
			<cnv:BasConverter/>
		</cnv:ChainConverter>
	</Binding.Converter>
</Binding>
 

IsEqualsConverter

Targetプロパティと同じだったらtrueを返すコンバータ

ソース

// 
    public class IsEqualsConverter : IValueConverter
    {
        #region IValueConverter メンバ
 
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var result = object.Equals(value, Target);
            return result;
        }
 
        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            var result = ((bool)value ? Target : null);
            return result;
        }
 
        #endregion
 
        public object Target
        {
            get;
            set;
        }
    }
 

タグ一覧