locked
大家好!请教一个问题。Silverlight除了DataGrid内部实现了System.ComponentModel.ICollectionView接口外。还有那个类也实现此接口了。详细问题如下: RRS feed

  • 问题

  •  

    是这样的DataGridI.itemSource 绑定的是ObservableCollection类型的数据集。如何让ObservableCollection排序后再绑定DataGrid.itemSource ,而不是ObservableCollection.OrderBy调用此方法。因为此方法返回的是个IOrderedEnumerable接口。绑定后DataGrid并不排序。最终目标是要达到Datagrid绑定后数据是排序过的。

    如果将排序过的数据Add到ObservableCollection是不行的。因为这只是按顺序添加并不代表ObservableCollection排序了。

    2008年10月27日 1:57

答案

  • Silverlight 4可能通过如入方法排序

    DataGrid通过DataGridTemplateColumn 中的 SortMemberPath来设置需要排序的列与那个排序条件相关联

    <sdk:DataGridTemplateColumn Header="Age" SortMemberPath="Index">
              <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <TextBlock Text="{Binding Path=Age}" />
                </DataTemplate>
              </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
    

     

    前台代码:

    <UserControl x:Class="SilverlightApplication3.TestDGSort"
      xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
      xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
      xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
      xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
      mc:Ignorable="d"
      d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
    
    
      <Grid x:Name="LayoutRoot" Background="White">
        <sdk:DataGrid AutoGenerateColumns="False" Height="300" HorizontalAlignment="Left" SelectionChanged="gridTest_SelectionChanged"
               x:Name="gridTest" VerticalAlignment="Top" Width="400" >
          <sdk:DataGrid.Columns>
            <sdk:DataGridTextColumn Header="Name" Binding="{Binding Name}" />
            <sdk:DataGridTemplateColumn Header="Age" SortMemberPath="Index">
              <sdk:DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                  <TextBlock Text="{Binding Path=Age}" />
                </DataTemplate>
              </sdk:DataGridTemplateColumn.CellTemplate>
            </sdk:DataGridTemplateColumn>
          </sdk:DataGrid.Columns>
          
        </sdk:DataGrid>
    
      </Grid>
    </UserControl>
    
    

     

    后台代码:

    using System;
    using System.Collections.Generic;
    using System.Linq;
    using System.Net;
    using System.Windows;
    using System.Windows.Controls;
    using System.Windows.Documents;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows.Media.Animation;
    using System.Windows.Shapes;
    
    namespace SilverlightApplication3
    {
    
      public partial class TestDGSort : UserControl
      {
        public TestDGSort()
        {
          InitializeComponent();
          this.Loaded += new RoutedEventHandler(TestGrid_Loaded);
        }
    
        void TestGrid_Loaded(object sender, RoutedEventArgs e)
        {
          this.gridTest.ItemsSource = User1.GetUsers();
    
        }
    
        private void gridTest_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
          MessageBox.Show(this.gridTest.SelectedIndex.ToString());
        }
      }// end for class
      public class User1
      {
        public string Name { get; set; }
        public int Age { get; set; }
        public int Index { get; set; }
        public static IList<User1> GetUsers()
        {
          IList<User1> userList = new List<User1>();
          userList.Add(new User1() { Name = "dd1", Age = 21,Index=1 });
          userList.Add(new User1() { Name = "dd2", Age = 22, Index = 4 });
          userList.Add(new User1() { Name = "dd3", Age = 22, Index = 3 });
          userList.Add(new User1() { Name = "de4", Age = 31, Index = 2 });
          return userList;
        }
      }
    
    }
    
    

     


    努力!完成了js解析器,还差一个svg插件,一个绘图程序,做好自己,呵呵~!
    • 已标记为答案 天使坠 2011年7月12日 6:43
    2011年7月12日 6:42