Как избежать косой черты в пути привязки WPF, или как обойти?

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

У некоторых из этих столбцов были имена, которые вызывали следующее:

<DataGridTextColumn x:Name="_Rev_UnitColumn" Binding="{Binding Path=Rev/Unit}" Header="Rev/Unit" Width="SizeToHeader" />

Это приводит к тому, что столбец становится пустым (как я).

3 ответа

Я (вроде случайно) попробовал:

<DataGridTextColumn x:Name="_Rev_UnitColumn" Binding="{Binding Path=[Rev/Unit]}" Header="Rev/Unit" Width="SizeToHeader" />

И в результате все получилось так, как я ожидал. Смотря на это снова, я предполагаю, что цитата MSB HB говорит мне об этом. Когда я прочитал это (первоначально в MSDN, прежде чем я даже опубликовал этот вопрос, потом снова здесь), я просто не понял, что означало " Внутри индексаторов --comma - символ вставки (^) экранирует следующий символ ".

На MSDN есть статья о путях свойств, в которой есть раздел о escape-символах:

Внутри индексаторов ([ ]) символ вставки (^) экранирует следующий символ.

Вы должны экранировать (используя объекты XML) определенные символы, которые являются специальными для определения языка XML. Используйте &, чтобы убежать от символа "&". Используйте> для экранирования конечного тега ">".

Вы должны экранировать (используя обратную косую черту \) символы, которые являются специальными для поведения синтаксического анализатора WPF XAML для обработки расширения разметки.

  • Обратная косая черта (\) - это сам символ выхода.
  • Знак равенства (=) отделяет имя свойства от значения свойства.
  • Запятая (,) разделяет свойства.
  • Правая фигурная скобка (}) является концом расширения разметки.

Слэш здесь не указан, поэтому я не знаю, сработает ли обратный слэш, но вы можете попробовать.

(Как именно у вас есть такое имя свойства? Это кажется недопустимым как в XML, так и в C#)

Если вам нужно замаскировать путь с помощью:символ, вы можете попробовать использовать скобки char(path)

Пример использования

      <Style x:Key="DefaultButtonStyle" TargetType="{x:Type Button}">
    <Setter Property="materialDesign:ButtonAssist.CornerRadius" Value="24"/>
    <Setter Property="Template">
        <Setter.Value>
            <ControlTemplate>
                <Border CornerRadius="{Binding (materialDesign:ButtonAssist.CornerRadius), RelativeSource={RelativeSource AncestorType=Button}}"/>
            </ControlTemplate>
        </Setter.Value>
    </Setter>
</Style>
Другие вопросы по тегам