Item Demon

<navigation:Page
  x:Class="DataGridAndChart.Home" 
  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"
  xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
  mc:Ignorable="d" d:DesignWidth="1240" d:DesignHeight="480"  
  Style="{StaticResource PageStyle}" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">

 
    
  <Grid x:Name="LayoutRoot">
        <Grid.Resources>
            <Popup x:Key="pop" Width="150" Height="75" IsOpen="False" MouseLeave="Popup_MouseLeave">
                <Grid >
                    <Grid.RowDefinitions>
                        <RowDefinition Height="23"></RowDefinition>
                        <RowDefinition Height="*"></RowDefinition>
                    </Grid.RowDefinitions>
                    <Grid.ColumnDefinitions>
                        <ColumnDefinition Width="*"></ColumnDefinition>
                        <ColumnDefinition Width="20"></ColumnDefinition>
                    </Grid.ColumnDefinitions>
                    <Border Background="Silver" Grid.ColumnSpan="2"></Border>
                    <Button Grid.Column="1" Background="Silver" BorderBrush="Silver" BorderThickness="0"  HorizontalAlignment="Right" Width="20" Content="X" x:Name="closePop" Click="closePop_Click"></Button>
                    <StackPanel Grid.Row="1" Grid.ColumnSpan="2">
                        <Button Content="Display History Sales Info"  Background="Silver" BorderBrush="Silver"  BorderThickness="0" Height="23"></Button>
                        <Button Content="Go to source"   Background="Silver" BorderBrush="Silver"  BorderThickness="0" Height="23"></Button>
                        <Button Content="Mark this item"  Background="Silver" BorderBrush="Silver"  BorderThickness="0" Height="23"></Button>
                    </StackPanel>

                </Grid>
            </Popup>
        </Grid.Resources>
            <ScrollViewer x:Name="PageScrollViewer" Style="{StaticResource PageScrollViewerStyle}">

      <StackPanel x:Name="ContentStackPanel" Style="{StaticResource ContentStackPanelStyle}">
          
           <StackPanel x:Name="toolPanel" Orientation="Horizontal">
               <ComboBox SelectionChanged="detailOptions_SelectionChanged" Name="detailOptions" Width="100" DisplayMemberPath="Name" SelectedValuePath="{Binding Value}" ItemsSource="{Binding DetailsOptions}"/>
                    <Button x:Name="feedBackBtn"  Width="100"  Content="Feed Back" Command="{Binding FeedBackCMD}"></Button>
                </StackPanel>
          
           <sdk:DataGrid Name="dg"
                              IsReadOnly="True" 
                              AutoGenerateColumns="False" 
                              AlternatingRowBackground="Silver"
                              CanUserReorderColumns="True" 
                              CanUserResizeColumns="True" 
                              CanUserSortColumns="True"
                              SelectionMode="Extended" 
                              SelectedItem="{Binding SelectedItem}" 
                              ItemsSource="{Binding DataSource}">
                    <sdk:DataGrid.Columns> 
                        <sdk:DataGridTextColumn Width="250" Header="Item Name" Binding="{Binding ItemName}"></sdk:DataGridTextColumn>
                        <sdk:DataGridTextColumn Width="150" Header="Shop Name" Binding="{Binding ShopName}"></sdk:DataGridTextColumn>
                        <sdk:DataGridTextColumn Width="150" Header="Price Range" Binding="{Binding PriceRange}"></sdk:DataGridTextColumn>
                        <sdk:DataGridTextColumn Width="100" Header="Sold Number" Binding="{Binding SoldNum}"></sdk:DataGridTextColumn>
                        <sdk:DataGridTextColumn Width="150" Header="Sold Amount" Binding="{Binding SoldAmount}"></sdk:DataGridTextColumn>
                        <sdk:DataGridTemplateColumn Header="Check">
                            <sdk:DataGridTemplateColumn.CellTemplate>
                                <DataTemplate>
                                    <Button Content="Go to Source"  x:Name="goToSourceBtn" Command="{Binding DataContext.GotToSourceCMD,ElementName=dg}"></Button>
                                </DataTemplate>
                            </sdk:DataGridTemplateColumn.CellTemplate>                           
                        </sdk:DataGridTemplateColumn>                     
                    </sdk:DataGrid.Columns>

                    <sdk:DataGrid.RowDetailsTemplate>
                        <!-- Begin row details section. -->
                        <DataTemplate>
                            <Border BorderBrush="Black" BorderThickness="1" Background="Tan" Margin="20,5,0,0">
                                <sdk:DataGrid 
                              AutoGenerateColumns="False" 
                              AlternatingRowBackground="Gray"
                              CanUserReorderColumns="True" 
                              CanUserResizeColumns="True" 
                              CanUserSortColumns="True"
                              SelectionMode="Extended"  
                              IsReadOnly="True" 
                              ItemsSource="{Binding Details}">
                                    <sdk:DataGrid.Columns>
                                        <sdk:DataGridTextColumn Width="380" Header="Item Name" Binding="{Binding ItemName}"></sdk:DataGridTextColumn> 
                                        <sdk:DataGridTextColumn Width="150" Header="Price Range" Binding="{Binding PriceRange}"></sdk:DataGridTextColumn>
                                        <sdk:DataGridTextColumn Width="100" Header="Sold Number" Binding="{Binding SoldNum}"></sdk:DataGridTextColumn>
                                        <sdk:DataGridTextColumn Width="150" Header="Sold Amount" Binding="{Binding SoldAmount}"></sdk:DataGridTextColumn>
                                    </sdk:DataGrid.Columns>
                              </sdk:DataGrid> 
                            </Border>
                        </DataTemplate>
                        <!-- End row details section. -->
                    </sdk:DataGrid.RowDetailsTemplate>
                </sdk:DataGrid>
          
  
          
            </StackPanel>

    </ScrollViewer>
  </Grid>

</navigation:Page>
namespace DataGridAndChart
{
    using System.Windows.Controls;
    using System.Windows.Navigation;
    using System.Collections.ObjectModel;
    using System;
    using System.Windows.Input;
    using System.Windows.Media;
    using System.Windows;
    using System.Windows.Controls.Primitives;

    /// <summary>
    /// Home page for the application.
    /// </summary>
    public partial class Home : Page
    {
        /// <summary>
        /// Creates a new <see cref="Home"/> instance.
        /// </summary>
        public Home()
        {
            InitializeComponent();

            this.Title = ApplicationStrings.HomePageTitle;
            this.DataContext = new HomeViewModel();
            dg.LoadingRow += new EventHandler<DataGridRowEventArgs>(dg_LoadingRow);
        }

        void dg_LoadingRow(object sender, DataGridRowEventArgs e)
        {
            e.Row.MouseRightButtonDown += new MouseButtonEventHandler(Row_MouseRightButtonDown);

        }

        void Row_MouseRightButtonDown(object sender, MouseButtonEventArgs e)
        {
            DataGridRow row= (DataGridRow)sender; 
            if (row == null)
                return;
            Point p =  e.GetPosition(Application.Current.RootVisual);
            Popup pop = LayoutRoot.Resources["pop"] as Popup;
            GeneralTransform gt = row.TransformToVisual(Application.Current.RootVisual);
            
            pop.HorizontalOffset = p.X;
            pop.VerticalOffset = p.Y;
            pop.IsOpen = true; 
           
            e.Handled = true;
            
        }

        private void closePop_Click(object sender, System.Windows.RoutedEventArgs e)
        {
            Popup pop = LayoutRoot.Resources["pop"] as Popup;
            pop.IsOpen = false; 
        } 

        /// <summary>
        /// Executes when the user navigates to this page.
        /// </summary>
        protected override void OnNavigatedTo(NavigationEventArgs e)
        {
        } 

        private void detailOptions_SelectionChanged(object sender, SelectionChangedEventArgs e)
        {
            ComboBox cb = sender as ComboBox;
            var item = cb.SelectedValue as NameValue;
            string option = item == null ? "Selected" : item.Value as string;
            switch (option)
            {
                case "Selected":
                    dg.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.VisibleWhenSelected;
                    break;
                case "All":
                    dg.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Visible;
                    break;
                case "None":
                    dg.RowDetailsVisibilityMode = DataGridRowDetailsVisibilityMode.Collapsed;
                    break;

            }  
        }

        private void Popup_MouseLeave(object sender, MouseEventArgs e)
        {
            Popup pop = LayoutRoot.Resources["pop"] as Popup;
            pop.IsOpen = false; 
        } 
    }

    public class HomeViewModel
    {
        public HomeViewModel()
        {
            dataSource = ItemSummary.Get();
        }

        ObservableCollection<NameValue> detailOptions = new ObservableCollection<NameValue>(new NameValue[] 
        {
            new NameValue { Name ="Selected Item(default)",Value ="Selected"},
            new NameValue {Name ="All Items",Value ="All"},
            new NameValue {Name ="None",Value ="None"}
        });
        public ObservableCollection<NameValue> DetailsOptions{ get { return detailOptions; } }

        ObservableCollection<ItemSummary> dataSource;
        public ObservableCollection<ItemSummary> DataSource { get { return  dataSource; } }

        public ItemSummary SelectedItem { get; set; }
    }

    public class NameValue
    {
        public object Name { get; set; }
        public object Value { get; set; }
    }

    public class ItemSummary
    {
        public string ItemName { get; set; }
        public string ShopName { get; set; }
        public string PriceRange { get; set; }
        public double SoldNum { get; set; }
        public double SoldAmount { get; set; }

        ObservableCollection<ItemSummary> details = new ObservableCollection<ItemSummary>();
        public ObservableCollection<ItemSummary> Details { get { return details; } }

        public static ObservableCollection<ItemSummary> Get()
        {
            Random r = new Random();
            ObservableCollection<ItemSummary> list = new ObservableCollection<ItemSummary>();
            for (int i = 0; i < 15; i++)
            {
                ItemSummary item = new ItemSummary();
                item.ItemName = "Sumsung/Cell Phone Glax S " + r.Next(1, 40);
                item.ShopName = "Shop_" + i;
                item.PriceRange = (r.NextDouble() + 1) * 1000 + "-" + (r.NextDouble() + 1) * 1000;
                item.SoldNum = r.Next(1, 100);
                item.SoldAmount = (r.NextDouble()+0.1)*10000;
                for (int j = 0; j < r.Next(2, 10); j++)
                {
                    ItemSummary item2 = new ItemSummary();
                    item2.ItemName =item .ItemName + " Package " + r.Next(1, 9); 
                    item2.PriceRange = ((r.NextDouble() + 1) * 1000).ToString("0.00");
                    item2.SoldNum = r.Next(1, 100);
                    item2.SoldAmount = ((r.NextDouble() + 0.1) * 10000);
                    item.Details.Add(item2);
                }
                list.Add(item);
            }

            return list;
        }
    }
}

 

posted @ 2013-06-13 13:38  mjg  阅读(123)  评论(0编辑  收藏  举报