1

ComboBox を XDocument から XElement にバインドしたいと考えています。twoway-Binding は Textbox では機能しますが、ComboBox では機能しません。

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 までの別の数値に変更すると、コンボ ボックスが更新されますが、その逆はありません。コンボボックスの選択が変更されても、XML の値は変更されません。

ComboBox Binding の何が問題になっていますか?

ありがとう

4

2 に答える 2

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);
}
于 2012-07-11T00:33:12.553 に答える
0

これは Microsoft による既知のバグであり、Hotfix が利用可能です: http://support.microsoft.com/kb/2328886

このバグは、.NET 4.0 で XElement または XAttribute を使用して Selector.SelectedValue (および SelectedItem と SelectedIndex。Selector は ComboBox および ListBox の基本クラス) をバインドする組み合わせで発生します。

于 2012-07-12T07:25:15.920 に答える