簡體   English   中英

顯示綁定到字符串數組的多行文本框,每個元素字符串在單獨的行上,允許進行編輯

[英]Display multiline textbox bound to an array of strings with each element string on a separate line, allowing editing

我有一個字符串數組,其中StringArray [0] =“僅用於存款”,StringArray [1] =“任何銀行”,StringArray [2] =“帳戶#123456789”; 還有更多的數組元素,但是假設這些是唯一填充的元素。

我需要在多行文本框中顯示這些字符串,如下所示:

僅用於存款
ANYTOWN的任何銀行
帳戶#123456789

用戶應該能夠像這樣編輯文本框:

僅用於存款
我的小鎮的銀行
帳戶#987654321

並按如下方式保存數組:StringArray [0] =“僅用於存款”,StringArray [1] =“我的小鎮的銀行”,StringArray [2] =“帳戶#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文件的頂部正確定義了“系統”變量。

這段代碼給我錯誤“雙向綁定需要路徑或XPath”。 該錯誤似乎在“綁定源”行上。 為了使我的文本框正常工作,我需要添加什么;如果在“綁定源”行上需要路徑,它將是什么? 謝謝。

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>

但是:由於每行都有相關的語義(帳戶類型,位置,帳戶編號),我認為最好對數據結構的每個元素使用單獨的文本框和直接數據綁定。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM