WPF ValueConversion -1-

索引表示




<Window x:Class="WpfApplication1.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:c="clr-namespace:ValueCVT"
Title="Wpf-VCVT-0000" Height="500" Width="750" Background="SteelBlue">
<Window.Resources>
<c:DataConverter x:Key="convertCheck"/>
</Window.Resources>
<Grid>
<Grid.RowDefinitions>
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
<RowDefinition Height="*" />
</Grid.RowDefinitions>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<Slider Grid.Column="1" Grid.Row="1" Name="slider1" />
<Slider Grid.Column="1" Grid.Row="2" Name="slider2" Value="{Binding ElementName=slider1,Path=Value,Converter={StaticResource convertCheck}}" />
</Grid>
</Window>

Convert と ConvertBack が正確に逆の動作になっていないと理屈通りの矛盾した動きになる。(この「変な日本語」以外には表現しにくいような面白い動作をする)
なんだこりゃ??のあと、よく考えると、あ〜、そーゆーことね〜、みたいな




using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;

using System.Windows;
using System.Globalization;
using System.Windows.Data;

namespace ValueCVT
{
[ValueConversion(typeof(Double), typeof(Double))]
public class DataConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
// ⇒方向の変換
Double z_forward = (Double)value;
return z_forward * 2;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
// ←方向の変換(逆方向)
Double z_rewind = (Double)value;
return z_rewind / 2;
}
}
}



AX