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>

但是可以在文本框中编辑数据,那么如何访问 ConvertBack 中的 2 个文本框值以便它们可以再次连接?

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>

应该足够了。您需要一个TwoWay绑定来从 UI 进行编辑,并且当您设置为时UpdateSourceTriggerPropertyChangedTextBoxViewModel 中修改属性时自动更新(您显然需要实现INotifyPropertyChanged

于 2012-06-06T14:02:45.370 回答