Como posso definir valores iniciais ao usar o Silverlight DataForm e .Net RIA Serviços DomainDataSource?
-
07-07-2019 - |
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?
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:
- Criar um novo item
- Criar um ChildWindow, passando o novo item à ChildWindow construtor
- 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;
}