Как избежать косой черты в пути привязки 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>