2010-12-10 29 views
1

Vous ne parvenez pas à comprendre pourquoi cette propriété Text n'est pas définie après la définition initiale de BidAgent dans ViewModel? La recherche et la sélection fonctionnent bien, mais pas la liaison initiale. Fondamentalement, ce que je veux, c'est quand je définis le modèle de vue (BidAgent) pour la vue, qu'il affiche le texte pour l'élément sélectionné qui est créé explicitement à partir des valeurs sur le BidAgent. Des idees pour faire cela?Autocomletebox: Comment lier la propriété text pour montrer quel élément est jamais sélectionné?

<i:Interaction.Triggers> 
     <i:EventTrigger EventName="AgentSearchCompleted" SourceObject="{Binding}"> 
      <ei:CallMethodAction TargetObject="{Binding ElementName=ctlAgentSearchBox}" MethodName="PopulateComplete" /> 
     </i:EventTrigger> 
    </i:Interaction.Triggers> 
<sdk:AutoCompleteBox Name="ctlAgentSearchBox" Width="300" Margin="0,5,0,0" HorizontalAlignment="Left" ItemsSource="{Binding AvailableAgents}" 
SelectedItem="{Binding SelectedAgent}" FilterMode="None" ValueMemberPath="SearchDisplayString" MinimumPrefixLength="1"> 
<sdk:AutoCompleteBox.ItemTemplate> 
     <DataTemplate> 
      <TextBlock Text="{Binding SearchDisplayString}"/> 
     </DataTemplate> 
</sdk:AutoCompleteBox.ItemTemplate> 
</sdk:AutoCompleteBox> 

code Derrière

public void GetActiveAgentsByNumber(object sender, PopulatingEventArgs e) 
{ 
    e.Cancel = true; 
    (DataContext as BidAgentEditViewModel).GetActiveAgentsByNumber(number.ToString()); 
} 

ViewModel

 public void GetActiveAgentsByNumber(string agentNumber) 
    { 
     _bidAgentDataService.GetActiveAgentsByNumber(agentNumber, getActiveAgentsByNumberCallback); 
     } 
     private void getActiveAgentsByNumberCallback(IEnumerable<AgentSearchDto> result) 
     { 
      AvailableAgents = result; 
      Event.Raise(AgentSearchCompleted, this); 
     } 

    private AgentSearchDto _selectedAgent; 
     public AgentSearchDto SelectedAgent 
     { 
      get { return _selectedAgent; } 

      set 
      { 
       _selectedAgent = value; 

       BidAgent.AgentId = Int32.Parse(_selectedAgent.Id); 
       BidAgent.AgentName = _selectedAgent.FullName; 
       BidAgent.AgentNumber = _selectedAgent.Number; 
       BidAgent.AgencyName = _selectedAgent.AgencyName; 

       RaisePropertyChanged(()=>SelectedAgent); 
      } 
     } 

    private BidAgentDto _bidAgent; 
     public BidAgentDto BidAgent 
     { 
      get { return _bidAgent; } 
      private set 
      { 
       _bidAgent = value; 
       RaisePropertyChanged(() => BidAgent); 
       SelectedAgent = new AgentSearchDto() 
            { 
             Id = _bidAgent.AgentId.ToString(), 
             Number = _bidAgent.AgentNumber, 
             FullName = _bidAgent.AgentName 
            }; 
      } 
     } 

Répondre

0

Est-il possible que l'objet retourné par la SelectedAgent propriété et son entrée correspondante dans la propriété AvailableAgents sont en fait deux distinc t les instances d'objets qui contiennent les mêmes données? Si c'est le cas, essayez d'assigner l'instance correspondante du AvailableAgents au SelectedAgent une fois que l'ensemble a été retourné.

+0

Il n'y a rien dans AvailableAgents lorsque le formulaire se charge, seulement après que l'utilisateur commence à chercher il est rempli. Ceci est pour l'édition d'un enregistrement existant. Donc au départ j'ai des valeurs que je veux afficher en saisie semi-automatique. – epitka