سؤال

أنا أعمل على WPF وقد اصطدمت بحائط خطير.لدي مجموعة بيانات تحتوي على عمودين، ContactName وContactTitle.لقد قمت بتحميل جميع البيانات بنجاح في ComboBox وقمت بفرزها حسب اسم جهة الاتصال.ومع ذلك، أحاول الآن الوصول إلى تلك البيانات وعرض جزء منها في TextBox.(هذا بالطبع مجرد إثبات لتمرين نوع المفهوم، وسيقوم المنتج النهائي بملء مجموعة متنوعة من مربعات النص بمعلومات الأشخاص المحددين).المشكلة هي أنني لا أستطيع الحصول على المعلومات لملءها في TextBox.هذا هو الكود الذي لدي:

    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";
            }
        }
    }
}

ثم هنا هو 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>

سيكون هدفي النهائي هو ملء TextBox ديناميكيًا عن طريق الحصول على القيمة المحددة، والحصول على المعلومات في مجموعة البيانات المرتبطة بمعرف العميل هذا، ولكن مجرد الحصول على نص العنصر المحدد ليتم ملؤه في TextBox سيكون خطوة كبيرة.

أي مساعدة يحظى بتقدير كبير.شكرا لكم جميعا.

هل كانت مفيدة؟

المحلول

جرب هذا؛فهو يزيل معالج الأحداث الذي تم تغييره ويعزز الربط.

<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>

ألق نظرة على هذا لذا أجب كذلك، والذي يوضح الاختلافات بين SelectedItem, SelectedValue, ، و SelectedValuePath وهي في النهاية القضية التي يواجهها معظم الناس.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top