Привязывание двух свойств с ==> Одиночное управление
-
27-10-2019 - |
Вопрос
Предположим, у меня есть собственность
FIrstName
а также LastName
Мне нужно связать это с помощью одиночного textbox
.
Так в просто Одиночный текстовый поле Я могу отобразить оба FirstName
а также LastName
.
Тогда как это возможно?
Решение
Вы можете использовать многобингирование для этого
За На пути Привязка используйте это:
<TextBox>
<TextBox.Text>
<MultiBinding StringFormat="{}{0} {1}" Mode="OneWay">
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBox.Text>
</TextBox>
Для получения дополнительной информации о Mutibinding Class Like на здесь
Другие советы
Попробуйте Многовилочный класс :
<TextBlock>
<TextBlock.Text>
<MultiBinding Converter="{StaticResource myConverter}">
<Binding Path="FirstName" />
<Binding Path="LastName" />
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Третья собственность FullName
, возможно.
Для лучшей помощи, пожалуйста, задайте лучший вопрос (каковы ваши типы, например).
РЕДАКТИРОВАТЬ: В любом случае, я бы порекомендовал иметь как минимум два текстовых поле, так что вы можете безопасно обрабатывать «имена Multipart», например, вышеупомянутые Karl Heinz Schmidt-Meyer von Neuenhausen zu Bad-Reichenhall
. Анкет Помимо того, что он менее неоднозначен, это стандарт Defacto на веб-формах.
Edit2: как примечание о Навид Рахмани Ответ, потому что он открывает потенциал для действительно серьезной коррупции базы данных, затрат сверхурочно для SYS-админи, программистов, которые не будут иметь отправной точки и подсказка о том, почему их применение терпит неудачу, и тонны денег. То есть, если эта жуткая коррупция когда -либо обнаружена до того, как ваш клиент уже потерял своих клиентов.
Код рассматривается
public object[] ConvertBack(object value, Type[] targetTypes, object parameter, CultureInfo culture)
{
string[] strings = ((string)value).Split(' ');
return strings;
}
Мой вопрос заключался в том, как это будет обращаться с именами Multipart. Он ответил, что можно было использовать »,« тогда. Мой ответ:
Ваш код не справляется с этим, поскольку он не обрабатывает корпус с менее чем двумя компонентами имени (вы получите
IndexOutOfRangeException
) Кроме того, ваш код не обрабатывает несколько или забытых пробелов. Для каждого дополнительного пробела он производит отдельную ценность, потенциально Разобление записей базы данных с исчезающими данными (потому что вы читаете только первые две записи). Далее вы должны подтвердить если Пользователь не забыл запятую или опасный, например, с полуколоном или чертой. Все эти проблемы перестают существовать с разделением в отдельные поля. Пользовательский ввод - это страх безопасности номер один и стабильность программы.
<TextBlock Name="textBox">
<TextBlock.Text>
<MultiBinding>
<Binding Path="FirstName"/>
<Binding Path="LastName"/>
</MultiBinding>
</TextBlock.Text>
</TextBlock>
Что -то подобное должно приблизить вас. Это не было написано в VS, поэтому я не уверен, что это синтаксически правильно.