Silverlight: MVVM и повторная инициализация формы - PullRequest
1 голос
/ 06 января 2011

Мы используем Prism, и из сетки мы выскакиваем форму редактирования, которая имеет две опции: «Сохранить» и «Сохранить и создать новый».Мой вопрос о повторной инициализации формы.Мне интересно, есть ли лучший или более простой способ?Что я делаю, это выставляю InteractionRequest на модель представления, а затем использую InteractionRequestTrigger в xaml для изменения свойств формы, например:

private void SubmitAndNewCommandCallback(IEnumerable<ValidationResult> errors)
{
    if (errors != null && errors.Any())
    {
        Errors = errors.Select(x => x.ErrorMessage).ToList();
    }
    else
    {
        if (IsNew)
        {
            _events.GetEvent<BidAgentCreated>().Publish(this.BidAgent);
        }

        _intializeFormRequest.Raise(this);
    } 
}


<i:Interaction.Triggers>
    <prism:InteractionRequestTrigger SourceObject="{Binding InitializeFormRequest}"  >
        <ei:ChangePropertyAction TargetName="ctlAgentType" PropertyName="SelectedIndex" Value="0" />
        <ei:ChangePropertyAction TargetName="ctlAgentSearchBox" PropertyName="Text" Value=""/>
    </prism:InteractionRequestTrigger>
</i:Interaction.Triggers>

1 Ответ

0 голосов
/ 04 ноября 2011

Чистый способ - избавиться от логики в View и сохранить ее во ViewModel.

в xaml

<ComboBox ItemsSource="{Binding AgentTypes}" SelectedItem="{Binding SelectedAgentType,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"/>
<TextBox Text="{Binding SearchText,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />

в ViewModel

private void SubmitAndNewCommandCallback(IEnumerable<ValidationResult> errors)
{
    if (errors != null && errors.Any())
    {
        Errors = errors.Select(x => x.ErrorMessage).ToList();
    }
    else
    {
        if (IsNew)
        {
            _events.GetEvent<BidAgentCreated>().Publish(this.BidAgent);
        }

        SearchText="";
        SelectedAgentType = AgentTypes.First();  //selects first agenttype, or set to null to select nothing in the combobox

    } 
}
...