WPF TextBlock.Text StringFormat не работает - PullRequest
0 голосов
/ 01 марта 2019

У меня есть следующий код:

<TextBlock Grid.Row="0" Grid.Column="2" FontWeight="Bold" FontSize="13" Name="PART_FRBold">
                                <TextBlock.Text>
                                    <MultiBinding StringFormat="This person is:  {}{0}; {1}, {2}">
                                        <Binding Path="PersonID"/>
                                        <Binding Path="LastName"/>
                                        <Binding Path="FirstName"/>
                                    </MultiBinding>
                                </TextBlock.Text>
                            </TextBlock>

В ViewModel я вижу, что все PersonID, LastName и FirstName присутствуют.Но на самом деле ничто не оказывает на страницу.Единственное, о чем я могу думать, это то, что StringFormat неверен.

Ответы [ 2 ]

0 голосов
/ 01 марта 2019

Ответ Микаэля Коскинена правильно указывает, что есть проблема со строкой формата (кредит, где кредит должен).

Проблема не в тексте " Этот человек: " в строке формата, а в неуместной escape-последовательности {}.Таким образом, хотя предложенное Микаэлем решение / обходной путь работает, оно также немного сложнее.Чтобы строка формата работала, требуется только поместить escape-последовательность {} в начале строки формата:

StringFormat="{}This person is:  {0}; {1}, {2}"
0 голосов
/ 01 марта 2019

Обновлено 3.3:

Фактическая проблема - синтаксическая ошибка.См. https://stackoverflow.com/a/54949686/66988 для правильного синтаксиса.

Для дальнейшего использования: вы можете использовать «статические» части в StringFormat, вам просто нужно запустить StringFormat с {}.

Исходный неправильный ответ с обходным решением:

Проблема в том, что вы не можете добавить «Этот человек» внутри свойства StringFormat.Если вы удалите эту часть:

        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0}; {1}, {2}">
                <Binding Path="PersonID"/>
                <Binding Path="LastName"/>
                <Binding Path="FirstName"/>
            </MultiBinding>
        </TextBlock.Text>

Вы увидите, что фактическое связывание работает.

Вы можете обойти эту проблему, используя статический ресурс для «статической» части текста.и привязка к нему:

        <TextBlock.Resources>
            <system:String x:Key="MyString">This person is</system:String>
        </TextBlock.Resources>
        <TextBlock.Text>
            <MultiBinding StringFormat="{}{0} {1}; {2}, {3}">
                <Binding Source="{StaticResource MyString}" />
                <Binding Path="PersonID"/>
                <Binding Path="LastName"/>
                <Binding Path="FirstName"/>
            </MultiBinding>
        </TextBlock.Text>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...