【问题标题】:How do I Bind 2 controls to 1 field AND also access the 2 control values for ConvertBack?如何将 2 个控件绑定到 1 个字段并访问 ConvertBack 的 2 个控件值?
【发布时间】:2012-06-06 13:00:39
【问题描述】:

在 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 个文本框值,以便它们可以再次连接?

【问题讨论】:

  • 您是否有权访问要绑定的视图模型?您能否为该视图模型引入 2 个新属性?

标签: wpf binding datatemplate ivalueconverter imultivalueconverter


【解决方案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 进行编辑,并且当您将 UpdateSourceTrigger 设置为 PropertyChanged 时,TextBox 将在 ViewModel 中修改属性时自动更新(您显然需要实现 @987654326 @)

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2011-06-20
    • 2017-12-13
    • 1970-01-01
    • 1970-01-01
    • 2021-06-04
    • 1970-01-01
    • 2015-02-21
    • 2011-11-14
    相关资源
    最近更新 更多