Como posso definir valores iniciais ao usar o Silverlight DataForm e .Net RIA Serviços DomainDataSource?

StackOverflow https://stackoverflow.com/questions/1432060

Pergunta

Eu estou experimentando com .Net RIA e Silverlight, eu tenho algumas das entidades relacionadas; Cliente, projeto e Job, um cliente tem muitos projetos e um projeto tem muitas Jobs.

No aplicativo Silverlight, eu estou uisng um DomainDataSource e controles DataForm para executar as operações de CRUD. Quando um cliente é selecionada uma lista de projectos aparece, altura em que o usuário pode adicionar um novo projeto para esse cliente. Eu gostaria de ser capaz de preencher o valor para o cliente automaticamente, mas não parece haver nenhuma maneira de fazer isso, quando há um evento AddingNewItem no controle DataForm, parece-fogo antes da DataForm tem uma instância do novo objeto e não tenho a certeza de arrasto através da changeSet do evento DomainDataSource SubmittingChanges é a melhor maneira de fazer isso.

Gostaria de pensei que isso teria sido uma característica óbvia ... Alguém sabe a melhor maneira de atingir essa funcionalidade?

Foi útil?

Solução

Bem, estar atrasado para a festa, mas enfrentando o mesmo problema que eu implementada uma solução alternativa usando um conversor de valor:

public class MissingDateTimeValueConverter : IValueConverter {

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) {
        if (value is DateTime && (DateTime)value == DateTime.MinValue) {
            DateTime returnValue = DateTime.Now.Date;
            int addDays;
            if (!string.IsNullOrEmpty(parameter as string) && int.TryParse(parameter as string, out addDays)) {
                returnValue = returnValue.AddDays(addDays);
            }
            return returnValue;
        } else {
            return value;   
        }
    }

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) {
        return value;            
    }

}

Ele traduz valores de data (por exemplo 01.01.0001) para a data de hoje desaparecidos e permite a adição / subtração de dias usando o parâmetro parameter.

Outras dicas

Algo que é comumente feito é ter uma tela que contém um DataGrid mostrando os dados existentes. Então, um botão Adicionar que:

  1. Criar um novo item
  2. Criar um ChildWindow, passando o novo item à ChildWindow construtor
  3. Tenha um DataForm dentro do ChildWindow, vinculado ao item especificado

Para valores padrão definido como a minha entidade é criada eu adicionei uma classe chamada [EntityName] .shared.cs. Então, usei a técnica escrito neste ligação . Funcionou bem para mim.

Esta solução permite que você adicione um novo item no final de uma coleção. A coleção é obrigado a DataForm. Antes de sair do manipulador atual, defina o DataForm.CurrentIndex como o último item na coleção, então cancelar o procedimento de adição. O novo item é inicializado / adicionado e visível na Dataform pronto para edição.

private void ResolutionDataForm_AddingNewItem(object sender, DataFormAddingNewItemEventArgs e)
    {
        // add a new iten in collection
        Resolution resolution = new Resolution() { FaultName = "test" };
        context.Resolutions.Add(resolution);
        //through binding the form gets updated
        ResolutionDataForm.CurrentIndex = context.Resolutions.Count-1;

        // cancel de current adding procedure
        e.Cancel = true;

    }
Licenciado em: CC-BY-SA com atribuição
Não afiliado a StackOverflow
scroll top