Xaml

2010-06-14 22 views
6

में संग्रहव्यूसोर्स सॉर्ट डिस्क्रिप्शन का बाध्यकारी संपत्ति नाम संग्रह यहां मेरा xaml है जो संग्रहदृश्य स्रोत प्रकार संपत्ति नाम बताता है।Xaml

<CollectionViewSource Source="{Binding Contacts}" x:Key="contactsCollection" Filter="CollectionViewSource_Filter"> 
      <CollectionViewSource.SortDescriptions> 
       <scm:SortDescription PropertyName="DisplayName" /> 
      </CollectionViewSource.SortDescriptions> 
</CollectionViewSource> 

XAML ऊपर ठीक काम करता है लेकिन समस्या यह है मेरे पास है मैं कैसे SortDescription PropertyName करने के लिए एक चर मूल्य देने के लिए पता नहीं है कि है। मेरे पास मेरे व्यूमोडेल में एक संपत्ति है जो बताती है कि किस संपत्ति को सॉर्ट करना है, लेकिन मैं इस संपत्ति को सॉर्टडिस्क्रिप्शन के प्रॉपर्टीनाम फ़ील्ड में बांधने में सक्षम नहीं हूं।

क्या कोई रास्ता है?

उत्तर

7

आप कोड को पीछे कोड में सेट कर सकते हैं।

XAML:

<Window.Resources> 

    <CollectionViewSource Source="{Binding People}" x:Key="_peopleCVS" /> 

</Window.Resources> 

<StackPanel> 
    <ListBox 
     ItemsSource="{Binding Source={StaticResource _peopleCVS}}"> 
     <ListBox.ItemTemplate> 
      <DataTemplate> 
       <StackPanel Orientation="Horizontal"> 
        <TextBlock Text="{Binding Path=Name}" Margin="5,0"/> 
        <TextBlock Text="{Binding Path=Age}" /> 
       </StackPanel> 
      </DataTemplate> 
     </ListBox.ItemTemplate> 
    </ListBox> 
    <ComboBox SelectionChanged="ComboBox_SelectionChanged"> 
     <ComboBoxItem>Age</ComboBoxItem> 
     <ComboBoxItem>Name</ComboBoxItem> 
    </ComboBox> 
</StackPanel> 

पीछे कोड:

using System.Collections.Generic; 
using System.ComponentModel; 
using System.Windows; 
using System.Windows.Controls; 
using System.Windows.Controls.Primitives; 
using System.Windows.Data; 

namespace CollectionViewSourceDemo 
{ 
    public partial class Window1 : Window 
    { 
     public Window1() 
     { 
      InitializeComponent(); 

      People = new List<Person>(); 
      People.Add(new Person("Bob", 34)); 
      People.Add(new Person("Sally", 12)); 
      People.Add(new Person("Joe", 56)); 
      People.Add(new Person("Mary", 23)); 

      DataContext = this; 
     } 

     public List<Person> People { get; private set; } 

     private void ComboBox_SelectionChanged(object sender, SelectionChangedEventArgs e) 
     { 
      ComboBoxItem comboBoxItem = (sender as Selector).SelectedItem as ComboBoxItem; 
      string sortProperty = comboBoxItem.Content as string; 
      CollectionViewSource cvs = FindResource("_peopleCVS") as CollectionViewSource; 
      cvs.SortDescriptions.Clear(); 
      cvs.SortDescriptions.Add(new SortDescription(sortProperty, ListSortDirection.Ascending)); 
     } 
    } 

    public class Person 
    { 
     public Person(string name, int age) 
     { 
      Name = name; 
      Age = age; 
     } 

     public string Name { get; private set; } 
     public int Age { get; private set; } 
    } 
} 
संबंधित मुद्दे

 संबंधित मुद्दे