Привязка WPF и динамично присвоение свойства StringFormat

У меня есть форма, которая сгенерирована на основе нескольких элементов DataTemplate. Один из элементов DataTemplate создает TextBox из класса, который похож на это:

public class MyTextBoxClass
{
   public object Value { get;set;}
   //other properties left out for brevity's sake
   public string FormatString { get;set;}
}

Мне нужен способ "связать" значение в свойстве FormatString к свойству "StringFormat" привязки. До сих пор я имею:

<DataTemplate DataType="{x:Type vm:MyTextBoxClass}">
 <TextBox Text="{Binding Path=Value, StringFormat={Binding Path=FormatString}" />
</DataTemplate>

Однако, так как StringFormat не является свойством зависимости, я не могу связать с ним.

Моя следующая мысль состояла в том, чтобы создать преобразователь значения и передать значение свойства FormatString в ConverterParameter, но я столкнулся с той же проблемой - ConverterParameter не является DependencyProperty.

Так, теперь я обращаюсь к Вам, ТАКИМ ОБРАЗОМ. Как делают я динамично установил StringFormat привязки; более конкретно, на TextBox?

Я предпочел бы позволять XAML сделать работу для меня так, я могу постараться не играть с кодом - позади. Я использую шаблон MVVM и хотел бы сохранить границы между моделью представления и представлением максимально ясными.

Спасибо!

10
задан Jason Williams 23 June 2010 в 05:08
поделиться

2 ответа

Одним из способов может быть создание класса, наследующего TextBox, и в этом классе создание собственного зависимого свойства, которое при установке делегируется StringFormat. Таким образом, вместо использования TextBox в XAML вы будете использовать унаследованный textbox и устанавливать собственное зависимое свойство в привязке.

2
ответ дан 4 December 2019 в 03:15
поделиться

Просто привяжите текстовое поле к экземпляру MyTextBoxClass вместо MyTextBoxClass.Value и используйте преобразователь значений для создания строки из значения и строки форматирования.

Другое решение - использовать многозначный преобразователь, который будет связываться как с Value, так и с FormatString.

Первое решение не поддерживает изменения свойств, то есть при изменении значения или строки форматирования преобразователь значений не будет вызываться, как если бы вы использовали многозначный преобразователь и привязывались непосредственно к свойствам.

1
ответ дан 4 December 2019 в 03:15
поделиться
Другие вопросы по тегам:

Похожие вопросы: