2012-07-10 2 views
1

Я хочу связать ComboBox с XElement из XDocument. В TwoWay-Переплётные работы на Textbox, но не на ComboBox:ComboBox привязка twoway с XElement

XAML:

<Window x:Class="ComboBoxBindingTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="31,38,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" SelectedValue="{Binding Path=Element[step].Element[schema].Value}" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="31,117,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding Path=Element[step].Element[schema].Value}"/> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="31,214,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" /> 
    </Grid> 
</Window> 

CS:

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
     InitializeComponent(); 

     comboBox1.Items.Add(new Tuple<string, string>("1", "Wert 1")); 
     comboBox1.Items.Add(new Tuple<string, string>("2", "Wert 2")); 
     comboBox1.Items.Add(new Tuple<string, string>("3", "Wert 3")); 
     comboBox1.Items.Add(new Tuple<string, string>("4", "Wert 4")); 
     comboBox1.Items.Add(new Tuple<string, string>("5", "Wert 5")); 
     comboBox1.Items.Add(new Tuple<string, string>("6", "Wert 6")); 
     comboBox1.Items.Add(new Tuple<string, string>("7", "Wert 7")); 

     comboBox1.SelectedValuePath = "Item1"; 
     comboBox1.DisplayMemberPath = "Item2"; 

     XDocument doc = XDocument.Parse("<dir><step><schema>2</schema></step></dir>"); 
     DataContext = doc.Element("dir"); 
    } 
} 

Изменение текста в текстовом поле на другой номер от 1 до 7 результатов в обновлении comboBox, но не наоборот. Значение в XML не изменяется при изменении выбора comboBox.

Что не так в связке ComboBox?

Благодаря

+0

Действительно ли необходимо использовать SelectedValue? Можете ли вы использовать SelectedItem вместо этого? Кажется, SelectedValue работает неправильно: http://stackoverflow.com/questions/247413/wpf-combobox-selectedvalue-not-updating-from-binding-source –

+0

У меня есть только значение выбранного элемента в xml (как показано в примере кода), поэтому я думаю, что мне нужно использовать свойство SelectedValue, поскольку у меня нет элемента. –

ответ

0

Это ноу Bug от Microsoft, исправление доступно: http://support.microsoft.com/kb/2328886

Эта ошибка происходит в комбинации связывания Selector.SelectedValue (и также SelectedItem и SelectedIndex; Selector - это базовый класс ComboBox, а также ListBox) с XElement или XAttribute в .NET 4.0.

0

попробовать это

<Window x:Class="ComboBoxBindingTest.MainWindow" 
     xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
     xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
     Title="MainWindow" Height="350" Width="525"> 
    <Grid> 
     <ComboBox Height="23" HorizontalAlignment="Left" Margin="31,38,0,0" Name="comboBox1" VerticalAlignment="Top" Width="120" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="31,117,0,0" Name="textBox1" VerticalAlignment="Top" Width="120" Text="{Binding ElementName=textBox2, Path=Text}" /> 
     <TextBox Height="23" HorizontalAlignment="Left" Margin="31,214,0,0" Name="textBox2" VerticalAlignment="Top" Width="120" Text="{Binding ElementName=textBox1, Path=Text}" /> 
    </Grid> 
</Window> 


public MainWindow() 
{ 
    InitializeComponent(); 
    comboBox1.Items.Add(new Tuple<string, string>("1", "Wert 1")); 
    comboBox1.Items.Add(new Tuple<string, string>("2", "Wert 2")); 
    comboBox1.Items.Add(new Tuple<string, string>("3", "Wert 3")); 
    comboBox1.Items.Add(new Tuple<string, string>("4", "Wert 4")); 
    comboBox1.Items.Add(new Tuple<string, string>("5", "Wert 5")); 
    comboBox1.Items.Add(new Tuple<string, string>("6", "Wert 6")); 
    comboBox1.Items.Add(new Tuple<string, string>("7", "Wert 7")); 

    comboBox1.SelectedValuePath = "Item1"; 
    comboBox1.DisplayMemberPath = "Item2"; 

    Binding binding = new Binding("Text"); 
    binding.Mode = BindingMode.TwoWay; 
    binding.Source = textBox1; 
    comboBox1.SetBinding(ComboBox.SelectedValueProperty, binding); 
} 
+0

Я отредактировал код xaml и cs, поэтому обновите код .xaml и .cs – Amged

+0

Спасибо за ваше решение, но вы пропустили Point. Проблема заключается в ** привязке к XElement **, которую вы полностью отбросили. –

Смежные вопросы