Невозможно обновить / обновить сетку данных после вставки в Silverlight 4 - PullRequest
0 голосов
/ 23 июля 2010

Я создаю главную страницу Silverlight Detials и у меня возникают проблемы с обновлением сетки данных после вставки новой записи. В верхней части страницы у меня есть текстовые поля для ввода информации, когда пользователь нажимает кнопку Сохранить, я хотел бы, чтобы информация автоматически обновлялась в базе данных и отображалась в таблице данных без обновления экрана.

Я могу без проблем сохранить информацию в базу данных, просто пытаюсь обновить сетку данных с новыми изменениями.

Часть моего кода для кнопки SAVE ниже:

ViewModel.UpdateWorkflow(summary, reason, Email);
LoadOperation<Document> lo = _Context.Load<Document>(_Context.GetDocumentsQuery(_DocID), rtRefresh, null);

Код для rtRefresh:

private void rtRefresh(LoadOperation<Document> oLoadOperation)
    {            
        if (oLoadOperation.IsComplete)
        {                                                         
            ViewModel.GetDocuments(_DocID);
        }
    }

Я установил ViewModel в файле xaml как:

<controls:ChildWindow.Resources>
    <viewModel:DocumentChildWindowViewModel x:Key="ViewModel" />
</controls:ChildWindow.Resources>

И ViewModel в коде позади:

ViewModel = Resources["ViewModel"] as DocumentChildWindowViewModel;

Буду признателен за любую помощь, спасибо.

Ответы [ 3 ]

1 голос
/ 24 июля 2010

Я предполагаю, что ваша сетка данных связана с IEnumerable, может быть, List <>?Вы пытались использовать ObservableCollection <>?Если вы привязаны к ObservableCollection, он сообщит пользовательскому интерфейсу об изменении коллекции.

<UserControl x:Class="SilverlightApplication1.MainPage"
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:local="clr-namespace:SilverlightApplication1"
xmlns:data="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400">

<UserControl.DataContext>
    <local:MainPage_ViewModel/>
</UserControl.DataContext>

<StackPanel>
    <data:DataGrid ItemsSource="{Binding MyCollection}">

    </data:DataGrid>
</StackPanel>

public class MainPage_ViewModel : INotifyPropertyChanged
{
    public ObservableCollection<object> MyCollection
    {
        get { return myCollection; }
        set 
        {
            if (myCollection != value)
            {
                myCollection = value;
                OnPropertyChanged("MyCollection");
            }
        }
    }
    private ObservableCollection<object> myCollection = new ObservableCollection<object>();

    public void LoadData()
    {
        //execute load method, the assign result to MyCollection
    }

    #region INotifyPropertyChanged Members

    public event PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string propertyName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
        }
    }

    #endregion
}
0 голосов
/ 26 октября 2010

Ваша проблема может быть связана со значением LoadBehavior по умолчанию для метода контекста Load ().Попробуйте явно установить LoadBehaviour в LoadBehaviour.RefreshCurrent.Для получения дополнительной информации о LoadBehaviour см. http://msdn.microsoft.com/en-us/library/system.servicemodel.domainservices.client.loadbehavior(v=VS.91).aspx.

Иногда, например, после удаления, вам также потребуется очистить () EntityContainer в контексте домена или, по крайней мере, очистить () определенный EntitySet <> длясущность, которую вы пытаетесь загрузить, для отображения нужных сущностей.

как, MyDomainContext.EntityContainer.GetEntitySet (). Clear ();

0 голосов
/ 24 июля 2010

В моей ViewModel я изначально создаю новый DomainContext ():

public DocumentWindowViewModel()
    {
        _Context = new appDomainContext();                       
        WireCommands();
    }

В итоге мне пришлось скопировать следующую строку в мой запрос:

_Context = new appDomainContext();

и вставить вфункция, которая извлекает значения из базы данных:

public void GetDocuments(int dID)
    {           
            _Context = new appDomainContext();  //ADDED THIS LINE TO FIX MY ISSUE                              
            _Context.Load(_Context.GetDocumentsQuery(dID), dlo =>
                {
                    DocumentsView = dlo.Entities;                                                
                }, null);                                
        }
    }

_Context сохранял старые значения.Это очистило _Context и позволило мне иметь обновленные данные в _Context.

...