我有一个字符串数组,其中StringArray =“仅存”,StringArray1 =“ANYTOWN",StringArray2 = "ACCOUNT #123456789";还有更多的数组元素,但假设只有这些元素被填充。
我需要在这样的多行文本框中显示这些字符串:
只作存款
任何一家银行
帐户#123456789
用户应该能够像这样编辑文本框:
只作存款
我的城镇银行
帐户#987654321
并将数组保存如下: StringArray =“只存”,StringArray1 =“我的城镇银行”,StringArray2 = "ACCOUNT #987654321“
在看了这个网站之后,我发现了这样的东西:
<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”的错误。错误出现在“绑定源”行上。要使我的文本框正常工作,我需要添加什么?如果在“绑定源”行上需要路径,它会是什么?谢谢。
发布于 2015-12-15 09:26:14
将Mode=OneWay添加到换行符绑定应该可以消除警告。也就是说,绑定不会将每个数组元素放在自己的行上,而是将它们连接起来。此方法显示您想要的内容:
<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并执行以下操作:
<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。
使用如下定义的转换器:
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中的某个转换器,例如:
<Grid.Resources>
<multiLine:MyConverter x:Key="MyConverter" />
</Grid.Resources>但是:因为每一行(帐户类型、位置、帐户#)都有相关的语义,所以我认为您最好为数据结构的每个元素使用单独的文本框和直接的数据绑定。
https://stackoverflow.com/questions/34256664
复制相似问题