#c# #wpf #binding
#c# #wpf #привязка
Вопрос:
Я не смог найти что-то, что работает для конкретного случая привязки XML, которую я пытаюсь выполнить.
У меня есть следующий фрагмент xml:
Я хочу привязать атрибут type к combobox в usercontrol, но список выбираемых значений определяется списком в usercontrol.
В моем пользовательском контроллере я создаю список возможных значений:
<UserControl.Resources>
<x:Array x:Key="HealingComponentTypes" Type="sys:String">
<sys:String>Absolute</sys:String>
<sys:String>AbsolutePercent</sys:String>
<sys:String>RelativePercent</sys:String>
</x:Array>
</UserControl.Resources>
Затем я привязываю их к выпадающему списку
<GroupBox DataContext="{Binding XPath=FieldHealingComponent}" Header="Field Use" Height="328" HorizontalAlignment="Left" Margin="231,2,0,0" Name="groupBox3" VerticalAlignment="Top" Width="220">
<Grid>
<GroupBox Header="HP Healing Component" Height="101" HorizontalAlignment="Left" Margin="6,0,0,0" Name="HPFieldUseGroup" VerticalAlignment="Top" Width="192">
<Grid>
<ComboBox ItemsSource="{StaticResource HealingComponentTypes}" SelectedItem="{Binding XPath=HP/@type}" Height="23" HorizontalAlignment="Left" Margin="62,49,0,0" Name="MPBattleUseType" VerticalAlignment="Top" Width="112" />
</Grid>
</GroupBox>
</Grid>
</GroupBox>
Проблема в том, что это не привязывает значения. Я вижу три возможности в выпадающем списке, но независимо от того, что я выбираю, это не отражается обратно в xml. Аналогично, начальное значение не отображается в combobox, даже если оно установлено. Я знаю, что базовый datacontext правильный, потому что у меня есть метка в groupbox
<TextBox Text="{Binding XPath=HP/@amount}" Height="23" HorizontalAlignment="Right" Margin="0,16,6,0" Name="HPFieldHealingAmount" VerticalAlignment="Top" Width="112" />
и он правильно отображает сумму. Я уверен, что это просто я не знаю, как правильно установить привязку. Я перепробовал множество предложений, которые появлялись, когда я искал это в Google, но ни одно из них не сработало. Будем признательны за любую помощь. Спасибо
Ответ №1:
Вы пробовали Mode= TwoWay в привязке?
Ответ №2:
Вы пробовали использовать конвертер? Я полагаю, что тип связанного атрибута не имеет типа string, и вам потребуется IValueConverter
для правильного чтения и обновления вашего XML.