Подстрока связанная строка - PullRequest
1 голос
/ 07 февраля 2012

То, что я хочу, это привязать строку к текстовому блоку или устройству сбора данных (в основном некоторый объект WPF) и взять часть строки.Эта строка будет разделена.Так, например, у меня есть эта строка:

String values = "value1|value2";

И у меня есть два элемента управления - txtBlock1 и txtBlock2.

В txtBlock1 я хотел бы установить свойство Text какText={Binding values}.В txtBlock2 я хотел бы установить свойство Text как Text={Binding values}.

Очевидно, что это будет отображать ту же строку, поэтому мне нужно какое-то выражение StringFormat, чтобы добавить к этой привязке значения подстроки, чтобы txtBlock1 читалvalue1 и txtBlock2 читают value2.

Я хорошо прочитал, и похоже, что это: Wpf Binding Stringformat для отображения только первого символа - это типичное предлагаемое решение.Но это кажется ужасно скучным из-за того, чего я пытаюсь достичь здесь.

Большое спасибо за любую помощь заранее.

Ответы [ 3 ]

1 голос
/ 07 февраля 2012

Я бы использовал конвертер значений, как описано в примере, который вы указали.

Но если вы хотите что-то более простое, вы можете использовать следующее свойство и привязки:

public string[] ValueArray
{
    get
    {
        return values.Split('|');
    }
}

<TextBlock Text="{Binding ValueArray[0]}" />
<TextBlock Text="{Binding ValueArray[1]}" />

Но позаботьтесь о том, что может произойти, если values равно нулю или не содержит |.

1 голос
/ 07 февраля 2012

Если у вас просто две строки, вы можете просто сделать:

<TextBlock Text=Text={Binding value1}/>
<TextBlock Text=Text={Binding value2}/>

и

public string value1
{
   get{return values.Split('|')[0]}
   set{values = value + values.Remove(0, values.IndexOf('|')+1)}
}
public string value2 ....
public string values ...

На самом деле вы можете написать функцию для set value и get value для связанного индекса (расширенный подход), но если вам не нравится этот синтаксис, IMO, что вы упомянули, является лучшим вариантом для вас.

1 голос
/ 07 февраля 2012

Здесь вам нужен конвертер.Добавьте параметр конвертера для указания индекса.

public class DelimiterConverter : IValueConverter
{
    public object Convert(Object value, Type targetType, object parameter, CultureInfo culture)
    {
        string[] values = ((string)value).Split("|");
        int index = int.Parse((string)parameter);
        return values[index];
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
    {
        return "";
    }

Затем вы просто указываете индекс значения в XAML с атрибутом ConverterParameter.

...