0

DataGridTemplateColumn DataTemplate で、2 つのコントロールを "[name]:[value]" 形式の文字列フィールドにバインドします。つまり、文字列はコロン ":" で区切られます。コントロール a) を [name] 部分にバインドし、コントロール b) を値部分にバインドする必要があります。

IValueConverter を使用して文字列を分割して表示することに成功しました。

public class NameAndValueConverter : IValueConverter
{
    public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
    {
        string rtn = ""; 

        string[] split = value.ToString().Split(':');

        if (split.Count() == 2)
        {
            if(parameter.ToString() == "Name")
                rtn = split[0];

            if(parameter.ToString() == "Value")
                rtn = split[1];
        }

        return rtn;
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        throw new InvalidOperationException("NameAndValueConverter can only be used OneWay.");
    }
}

そしてXAML:

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <StackPanel.Resources>
                <local:NameAndValueConverter x:Key="NameAndValueConverter" />
            </StackPanel.Resources>
            <TextBox x:Name="namePart" Text="{Binding Path=FieldType, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Name'}" />
            <TextBox x:Name="valuePart" Text="{Binding Path=FieldType, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Value'}" />
        </StackPanel>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

しかし、データは Textboxes で編集される可能性があるため、ConvertBack で 2 つの TextBox 値にアクセスして再度結合できるようにするにはどうすればよいですか?

4

1 に答える 1

1

XAML でこれを行う:

<DataGridTemplateColumn.CellEditingTemplate>
    <DataTemplate>
        <StackPanel Orientation="Horizontal">
            <StackPanel.Resources>
                <local:NameAndValueConverter x:Key="NameAndValueConverter" />
            </StackPanel.Resources>
            <TextBox x:Name="namePart" Text="{Binding Path=FieldType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Name'}" />
            <TextBox x:Name="valuePart" Text="{Binding Path=FieldType, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, Converter={StaticResource NameAndValueConverter}, ConverterParameter='Value'}" />
        </StackPanel>
    </DataTemplate>
</DataGridTemplateColumn.CellEditingTemplate>

十分なはずです。TwoWayUI から編集するにはバインディングが必要です。 に設定UpdateSourceTriggerするとPropertyChangedTextBoxViewModel でプロパティが変更されたときに自動的に更新されます (明らかに を実装する必要がありますINotifyPropertyChanged) 。

于 2012-06-06T14:02:45.370 に答える