首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >显示绑定到字符串数组的多行文本框,每个元素字符串位于单独的行上,允许编辑。

显示绑定到字符串数组的多行文本框,每个元素字符串位于单独的行上,允许编辑。
EN

Stack Overflow用户
提问于 2015-12-13 21:35:57
回答 1查看 1.1K关注 0票数 0

我有一个字符串数组,其中StringArray =“仅存”,StringArray1 =“ANYTOWN",StringArray2 = "ACCOUNT #123456789";还有更多的数组元素,但假设只有这些元素被填充。

我需要在这样的多行文本框中显示这些字符串:

只作存款

任何一家银行

帐户#123456789

用户应该能够像这样编辑文本框:

只作存款

我的城镇银行

帐户#987654321

并将数组保存如下: StringArray =“只存”,StringArray1 =“我的城镇银行”,StringArray2 = "ACCOUNT #987654321“

在看了这个网站之后,我发现了这样的东西:

代码语言:javascript
复制
<TextBox TextWrapping="Wrap" AcceptsReturn="True">
    <TextBox.Text>
        <MultiBinding StringFormat="{}{0}{1}{2}">
            <Binding Path="StringArray[0]"/>
            <Binding Path="StringArray[1]"/>
            <Binding Path="StringArray[2]"/>
            <Binding Source="{x:Static System:Enviroment.NewLine}"/>
        </MultiBinding>
    </TextBox.Text>
</TextBox>

在我的XAML文件顶部正确定义了"System“变量。

这段代码给出了“双向绑定需要路径或XPath”的错误。错误出现在“绑定源”行上。要使我的文本框正常工作,我需要添加什么?如果在“绑定源”行上需要路径,它会是什么?谢谢。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2015-12-15 09:26:14

Mode=OneWay添加到换行符绑定应该可以消除警告。也就是说,绑定不会将每个数组元素放在自己的行上,而是将它们连接起来。此方法显示您想要的内容:

代码语言:javascript
复制
<TextBox
    TextWrapping="Wrap"
    AcceptsReturn="True">
    <TextBox.Text>
        <MultiBinding StringFormat="{}{0}{1}{2}{3}{4}">
            <Binding Path="StringArray[0]" ElementName="self" />
            <Binding Source="{x:Static system:Environment.NewLine}" Mode="OneWay" />
            <Binding Path="StringArray[1]" ElementName="self" />
            <Binding Source="{x:Static system:Environment.NewLine}" Mode="OneWay" />
            <Binding Path="StringArray[2]" ElementName="self" />
        </MultiBinding>
    </TextBox.Text>
</TextBox>

至于更新字符串数组,我不确定在没有转换器的情况下你能做到这一点。您可以抛出StringFormat并执行以下操作:

代码语言:javascript
复制
<TextBox
    TextWrapping="Wrap"
    AcceptsReturn="True">
    <TextBox.Text>
        <MultiBinding Converter="{StaticResource MyConverter}">
            <Binding Path="StringArray[0]" ElementName="self" />
            <Binding Path="StringArray[1]" ElementName="self" />
            <Binding Path="StringArray[2]" ElementName="self" />
        </MultiBinding>
    </TextBox.Text>
</TextBox>

在这里,我在我的Window类上设置了x:Name="self",它声明了StringArray

使用如下定义的转换器:

代码语言:javascript
复制
public sealed class MyConverter : IMultiValueConverter
{
    public object Convert(object[] values, Type targetType, object parameter, CultureInfo culture)
    {
        return string.Join(Environment.NewLine, values);
    }

    public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
    {
        string stringValue = (string)value;
        return stringValue.Split(new[] { '\r', '\n' }, StringSplitOptions.RemoveEmptyEntries);
    }
}

引用XAML中的某个转换器,例如:

代码语言:javascript
复制
<Grid.Resources>
    <multiLine:MyConverter x:Key="MyConverter" />
</Grid.Resources>

但是:因为每一行(帐户类型、位置、帐户#)都有相关的语义,所以我认为您最好为数据结构的每个元素使用单独的文本框和直接的数据绑定。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/34256664

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档