Question

Je travaille sur un WPF et ont frappé un mur sérieux. J'ai un ensemble de données qui comporte deux colonnes, ContactName et ContactTitle. Je l'ai chargé avec succès toutes les données dans une zone de liste déroulante et même triés par ContactName. Cependant, je suis en train d'accéder maintenant partie de données et l'affichage de celui-ci dans une zone de texte. (Ceci est bien sûr juste une preuve d'exercice de type de concept, le produit final remplira une variété de zones de texte avec les informations des personnes sélectionnées). Le problème est, je ne peux pas obtenir l'information pour alimenter dans la zone de texte. Voici le code que j'ai:

    using System.Windows;
    using System.Windows.Controls;
    using System.ComponentModel;

    namespace MultiBindingInWPF_CS
    {

    public partial class Window1 : Window
    {
        public Window1()
        {
            InitializeComponent();
        }

        private void Grid_Loaded(object sender, RoutedEventArgs e)
        {
            //Create DataSet
            CustomersDataSet customerDataSet = new CustomersDataSet();

            //Create DataTableAdapter
            CustomersDataSetTableAdapters.CustomersTableAdapter taCustomers = new CustomersDataSetTableAdapters.CustomersTableAdapter();
            taCustomers.Fill(customerDataSet.Customers);
            //Sort Data
            SortDescription sd = new SortDescription("ContactName", ListSortDirection.Descending);
            //Designate ItemSource
            this.ComboBox1.ItemsSource = customerDataSet.Customers;
            //Apply Sort
            this.ComboBox1.Items.SortDescriptions.Add(sd);
        }

        private void ComboBox1_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            try
            {
                //Using SelectedIndex only to prove connection to TextBox is working
                textBox1.Text = ComboBox1.SelectedIndex.ToString();
            }
            catch
            {
                textBox1.Text = "Invalid";
            }
        }
    }
}

Alors voici mon XAML:

<Window x:Class="MultiBindingInWPF_CS.Window1"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:scm="clr-namespace:System.ComponentModel;assembly=WindowsBase"
    Title="Multibinding in WPF" Height="163" Width="300">

    <Grid Loaded="Grid_Loaded">
        <StackPanel Name="StackPanel1" Margin="12">
            <Label Height="28" Name="Label1">List of Customers (Name AND Title :-) )</Label>
            <ComboBox Height="23" Name="ComboBox1" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" IsTextSearchEnabled="True" SelectionChanged="ComboBox1_SelectionChanged" SelectedValue="{Binding Path=CustomerID}">
                <ComboBox.ItemTemplate>
                    <DataTemplate>
                        <TextBlock DataContext="{Binding}">
                            <TextBlock.Text>
                                <MultiBinding StringFormat="{}{0} - {1}">
                                    <Binding Path="ContactName" />
                                    <Binding Path="ContactTitle" />
                                </MultiBinding>
                            </TextBlock.Text>
                        </TextBlock>
                    </DataTemplate>
                </ComboBox.ItemTemplate>
            </ComboBox>
            <TextBox Height="23" Name="textBox1" Width="120"/>
        </StackPanel>
    </Grid>
</Window>

Mon but ultime serait de remplir la zone de texte dynamique en obtenant la valeur sélectionnée, et d'obtenir les informations dans l'ensemble de données associé à ce CustomerID, mais juste obtenir le texte de SelectedItem pour alimenter dans la zone de texte serait un grand pas.

Toute aide est très appréciée. Merci à tous.

Était-ce utile?

La solution

Donner à ceci un essai; il supprime le gestionnaire d'événements a changé et tire parti de la liaison.

<Grid Loaded="Grid_Loaded">
    <StackPanel Name="StackPanel1" Margin="12">
        <Label Height="28" Name="Label1">List of Customers (Name AND Title :-) )</Label>
        <ComboBox Height="23" Name="ComboBox1" IsSynchronizedWithCurrentItem="True" ItemsSource="{Binding}" IsTextSearchEnabled="True" SelectedValue="{Binding Path=CustomerID}">
            <ComboBox.ItemTemplate>
                <DataTemplate>
                    <TextBlock DataContext="{Binding}">
                        <TextBlock.Text>
                            <MultiBinding StringFormat="{}{0} - {1}">
                                <Binding Path="ContactName" />
                                <Binding Path="ContactTitle" />
                            </MultiBinding>
                        </TextBlock.Text>
                    </TextBlock>
                </DataTemplate>
            </ComboBox.ItemTemplate>
        </ComboBox>
        <TextBox Height="23" Name="textBox1" Text="{Binding ElementName=ComboBox1, Path=SelectedItem.ContactName}" Width="120"/>
    </StackPanel>
</Grid>

Consultez cette répondre SO et qui détaille les différences entre SelectedItem, SelectedValue et SelectedValuePath et est finalement la question la plupart des gens courent dans.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top