2通りの表現を、2つのフィールドで。
(1) 幅
(2) 幅x個数
幅を入力したい。しかし、分割する場合も有る。では、最初は3つだけ分割→幅1,幅2,幅3。いやいや、そうではなく、何個かに分ける場合も有る→幅1x幅1個数,幅2x幅2個数,幅3x幅3個数。これでも表現できないものは備考に、という流れになりました。
MultiBindingの性質として、「入力は1つ以上」「出力は1つだけ」という条件が有ります。丁度これに合っています。
XAML:
<GridViewColumn Header="W1" Width="70" local:LvSortSpec.Columns="幅1" local:GvcManager.Key="幅1" > <GridViewColumn.CellTemplate> <DataTemplate> <TextBlock HorizontalAlignment="Center"> <TextBlock.Text> <MultiBinding Converter="{StaticResource 寸法個数Converter}"> <Binding Path="幅1" /> <Binding Path="幅1個数" /> </MultiBinding> </TextBlock.Text> </TextBlock> </DataTemplate> </GridViewColumn.CellTemplate> </GridViewColumn>
お分かりとは思いますが、 "寸法個数Converter"を、リソース辞書で定義するようにしてください。
<local:寸法個数Converter x:Key="寸法個数Converter" />
C#
public class 寸法個数Converter : IMultiValueConverter { public object Convert(object[] values, Type targetType, object parameter, System.Globalization.CultureInfo culture) { if (true && values != null && values.Length == 2 ) { if (!object.ReferenceEquals(values[0], DependencyProperty.UnsetValue)) { if (!object.ReferenceEquals(values[1], DependencyProperty.UnsetValue)) { return values[0] + "×" + values[1]; } return "" + values[0]; } } return ""; } public object[] ConvertBack(object value, Type[] targetTypes, object parameter, System.Globalization.CultureInfo culture) { throw new NotImplementedException(); } }
DependencyProperty.UnsetValue が出現します。値が無い場合、nullか、DBNull.Valueが来るのかと思いきや、違って、こういう値がくるようです。