如何重新绑定Silverlight DataGrid [英] how rebind silverlight datagrid

查看:61
本文介绍了如何重新绑定Silverlight DataGrid的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我只是在Silverlight中做一个简单的示例,该示例从数据库中检索数据,还可以插入,更新和删除
我将子窗口用于插入命令,当我在此ChildWindow上单击确定"按钮时,它将插入数据库中,但未在页面上呈现(Silverlight内容),因此存在相同的记录,因此数据库中确实会插入信息.仅在再次重新午餐此页面后,它才能正确显示(从服务器检索所有数据)
我会发布我的来源

这是Customer.xaml文件

I am just doing simple example in Silverlight, which retrieves data from database, can also insert, update and delete
I use child window for insert command, when I click "OK" Button at this ChildWindow it insert''s in database but not renders on page(Silverlight content), there is same records therefore in database really inserts information. only after again re-lunch this page, it shows correctly(retrieves all data from server)
I''ll post my source

this is Customers.xaml file

<UserControl x:Class="Store.Customers"

    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:mv="clr-namespace:Store.ViewModel"

    xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"

    mc:Ignorable="d"

    d:DesignHeight="500" d:DesignWidth="1000">
    <UserControl.Resources>
        <mv:ViewModel x:Key="ViewModel"/>
    </UserControl.Resources>
    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="127*" />
            <ColumnDefinition Width="Auto" />
            <ColumnDefinition Width="130*" />
        </Grid.ColumnDefinitions>
        <Grid.RowDefinitions>
            <RowDefinition Height="91*" />
            <RowDefinition Height="99*" />
            <RowDefinition Height="110*" />
        </Grid.RowDefinitions>
        <Button Name="btnEdit" Content="Edit" HorizontalAlignment="Right" Grid.Column="1" Width="55" Height="30"  Margin="0,225,0,0" Click="btnEdit_Click" />
        <data:DataGrid Name="dgCustomer"

              AutoGenerateColumns="False" VerticalScrollBarVisibility="Visible"

              ItemsSource="{Binding Items, Mode=TwoWay, Source={StaticResource ViewModel}}"

              Grid.Row="1" Grid.Column="1">
            <data:DataGrid.Columns>
                <data:DataGridTextColumn Header="ID" Binding="{Binding CustomerID}"/>
                <data:DataGridTextColumn Header="CompanyName" Binding="{Binding CompanyName}"/>
                <data:DataGridTextColumn Header="ContactName" Binding="{Binding ContactName}"/>
                <data:DataGridTextColumn Header="ContactTitle" Binding="{Binding ContactTitle}"/>
                <data:DataGridTextColumn Header="Address" Binding="{Binding Address}"/>
                <data:DataGridTextColumn Header="City" Binding="{Binding City}"/>
                <data:DataGridTextColumn Header="Region" Binding="{Binding Region}"/>
                <data:DataGridTextColumn Header="PostalCode" Binding="{Binding PostalCode}"/>
                <data:DataGridTextColumn Header="Country" Binding="{Binding Country}"/>
                <data:DataGridTextColumn Header="Phone" Binding="{Binding Phone}"/>
                <data:DataGridTextColumn Header="Fax" Binding="{Binding Fax}"/>
                <data:DataGridCheckBoxColumn Header="IsCitizen" Binding="{Binding IsCitizen}"/>
            </data:DataGrid.Columns>
        </data:DataGrid>
        <data:DataPager HorizontalContentAlignment="Center" x:Name="myPager"

                            Source="{Binding ItemsSource, ElementName=dgCustomer}"

                            AutoEllipsis="True"

                            PageSize="10" Grid.Row="2" Grid.Column="1" VerticalAlignment="Top"/>
    </Grid>
</UserControl>



这是子窗口



this is childwindow

<<pre lang="xml">controls:ChildWindow x:Class="Store.AddNewCustomer"
           xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
           xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
           xmlns:controls="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls"
           xmlns:mv="clr-namespace:Store.ViewModel"
           Width="450" Height="350"
           Title="AddNewCustomer" >
    <controls:ChildWindow.Resources>
        <mv:ViewModel x:Key="ViewModel"/>
    </controls:ChildWindow.Resources>
    <Grid x:Name="LayoutRoot" Margin="2">
        <Grid.RowDefinitions>
            <RowDefinition />
            <RowDefinition Height="Auto" />
        </Grid.RowDefinitions>
        <Grid>
            <Grid.RowDefinitions >
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
                <RowDefinition Height="30" />
            </Grid.RowDefinitions>
            <Grid.ColumnDefinitions >
                <ColumnDefinition Width="30*"></ColumnDefinition>
                <ColumnDefinition Width="70*"></ColumnDefinition>
            </Grid.ColumnDefinitions>
            <TextBlock Grid.Row="1" Grid.Column="0" Text="Customer ID :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="1" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtCustomerID"
                     Text="{Binding CustomerID, Mode=TwoWay, Source={StaticResource ViewModel}}" />
            <TextBlock Grid.Row="2" Grid.Column="0" Text="Company Name :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="2" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtCompanyName"
                     Text="{Binding CompanyName, Mode=TwoWay, Source={StaticResource ViewModel}}"/>
            <TextBlock Grid.Row="3" Grid.Column="0" Text="Contact Name :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="3" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtContactName" />
            <TextBlock Grid.Row="4" Grid.Column="0" Text="Contact Title :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="4" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtContactTitle" />
            <TextBlock Grid.Row="5" Grid.Column="0" Text="Address :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="5" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtAddressTitle" />
            <TextBlock Grid.Row="6" Grid.Column="0" Text="City :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="6" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtCity" />
            <TextBlock Grid.Row="7" Grid.Column="0" Text="Country :" VerticalAlignment="Center" Margin="2,0,0,0" />
            <TextBox Grid.Row="7" Grid.Column="1" VerticalAlignment="Center" Margin="2,0" x:Name="txtCountry" />
        </Grid>
        <Button x:Name="CancelButton" Content="Cancel" Click="CancelButton_Click" Width="75" Height="23" HorizontalAlignment="Right" Margin="0,12,0,0" Grid.Row="1" />
        <Button x:Name="OKButton" Content="OK"  Width="75" Height="23" HorizontalAlignment="Right" Click="OKButton_Click"
                Margin="0,12,79,0" Grid.Row="1" Command="{ Binding AddNewCustomer, Mode=TwoWay, Source={StaticResource ViewModel} }"/>
    </Grid>
</controls:ChildWindow


>

这是我的ViewModel


>

this is My ViewModel

public class ViewModel : BaseViewModel
    {

        #region Fields
        
        public ObservableCollection<Customer> _items;
        public PagedCollectionView _view;
        public string _customerID;
        public string _companyName;

        #endregion

        #region Constructors

        public ViewModel()
        {
            if (!this.IsDesignTime)
                this.LoadCustomer();
        } 

        #endregion

        #region Properties

        public ICommand AddNewCustomer { get { return new AddNewCustomerInfo(this); } }
        
        public ObservableCollection<Customer> Items
        {
            get { return this._items; }
            set
            {
                this._items = value;
                this.OnPropertyChanged("Items");
            }
        }

        public PagedCollectionView PagedView
        {
            get { return this._view; }
            set
            {
                this._view = value;
                this.OnPropertyChanged("PagedView");
            }
        }

        public string CustomerID
        {
            get { return this._customerID;}
            set
            {
                this._customerID = value;
                this.OnPropertyChanged("CustomerID");
            }
        }

        public string CompanyName
        {
            get { return this._companyName; }
            set
            {
                this._companyName = value;
                this.OnPropertyChanged("CompanyName");
            }
        }
        
        #endregion

        #region Methods

        public void LoadCustomer()
        {
            DataServiceClient webService = new DataServiceClient();
            webService.GetCustomersCompleted += new EventHandler<GetCustomersCompletedEventArgs>(webService_GetCustomersCompleted);
            
            webService.GetCustomersAsync();
        }

        public void webService_GetCustomersCompleted(object sender, GetCustomersCompletedEventArgs e)
        {
            Items = e.Result;
            
            PagedCollectionView pageView = new PagedCollectionView(Items);
            pageView.PageSize = 10;
            PagedView = pageView;
            
        }

        public void CreateCustomer()
        {
            DataServiceClient webservice = new DataServiceClient();

            Customer cust = new Customer();
            cust.CustomerID = this.CustomerID;
            cust.CompanyName = this.CompanyName;
            webservice.InsertCustomerCompleted += new EventHandler<InsertCustomerCompletedEventArgs>(webservice_InsertCustomerCompleted);

            webservice.InsertCustomerAsync(cust);

            LoadCustomer();
        }

        void webservice_InsertCustomerCompleted(object sender, InsertCustomerCompletedEventArgs e)
        {
            this.CreateResult = e.Result;
        }

        #endregion


    }

    public class AddNewCustomerInfo : ICommand
    {
        #region Fields

        public ViewModel ViewModel { get; set; }
        #endregion

        #region Constructors

        public AddNewCustomerInfo(ViewModel viewModel)
        {
            this.ViewModel = viewModel;
        }

        #endregion

        public bool CanExecute(object parameter)
        {
            return true;
        }

        public event EventHandler CanExecuteChanged;

        public void Execute(object parameter)
        {
                this.ViewModel.CreateCustomer();
        }
    }



网格和子窗口看起来像



Grid and childwindow looks like this

推荐答案

我检查了您的代码,但看不到您做了_items.Add(cust);之类的事情.
您应该将创建的新客户实例添加到_ items 集合中.
I went through your code but could not see you do something like _items.Add(cust);.
You should be adding the new customer instance that you create to the _items collection.


这篇关于如何重新绑定Silverlight DataGrid的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆