none
WPF binding RRS feed

  • שאלה

  • שלום לכולם

    יש פרוייקט WPF אשר בתוכו יש מחלקה של PERSON עם Properties של שם וגיל.
    בקוד של דף ה XAML אני מאתחל רשימה של Persons ועוד רשימה פשוטה של string.
    ב XAML יש 2 Listbox כאשר מה שאני רוצה לעשות זה לבצע Binding לכל אחד מהם עם List שונה.

    <Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:l="clr-namespace:WpfApplication1"
        Title="MainWindow" Height="350" Width="525" Loaded="Window_Loaded" >
        <StackPanel Orientation="Horizontal">
        <ListBox x:Name="Lb1" MinHeight="30" MinWidth="100" BorderBrush="Black" />
        <ListBox x:Name="Lb2" MinHeight="30" MinWidth="100" BorderBrush="Black" Margin="55,0"/>
      </StackPanel>
    </Window>
    
     public MainWindow()
        {
          InitializeComponent();
        }
    
        List<person> Plist = new List<person>();
        List<string> stringlist = new List<string>();
    
        private void Window_Loaded(object sender, RoutedEventArgs e)
        {
          Plist.Add(new person { Age = 15, Name = "aaa" });
          Plist.Add(new person { Age = 25, Name = "bbb" });
          Plist.Add(new person { Age = 35, Name = "ccc" });
          Plist.Add(new person { Age = 45, Name = "ddd" });
    
          for (int i = 0; i < 3; i++)
          {
            stringlist.Add("a" + i.ToString());
          }
    
         }



    אשמח לעזרה בנושא.

    יום שישי 08 יולי 2011 08:23

תשובות

  • כאשר מבצעים Binding ישנם 4 דרכים לקבוע מי אובייקט המקור:

    1. באמצעות התכונה ElementName של אובייקט ה Binding
    2. באמצעות התכונה DataContext של האובייקט היעד שעליו מתבצע ה Binding
    3. באמצעות התכונה Source של אובייקט ה Binding
    4. באמצעות התכונה RelativeSource של אובייקט ה Binding

    לא אכנס עכשיו לפירוט של כל הדרכים (בקרוב אפרסם מדריך בעברית בנושא)

    בכל אופן, במקרה שלך ניתן להשתמש ב DataContext או בSource.
    הדרך הנפוצה יותר היא שימוש ב DataContext, לכן הפתרון במקרה שלך הוא משהו בסגנון:

    Lb1.DataContext = Plist;
    Lb2.DataContext = stringlist;
    
    
    


    Arik Poznanski
    blogs.microsoft.co.il/blogs/arik

    • סומן כתשובה על-ידי Yoav Eyal שבת 09 יולי 2011 16:16
    שבת 09 יולי 2011 07:51