2010-12-10 4 views
1

Kann nicht herausfinden, warum dies keine Text-Eigenschaft setzt, nachdem BidAgent in ViewModel initial auf einen Wert gesetzt wurde? Das Suchen und Auswählen funktioniert einwandfrei, die anfängliche Bindung jedoch nicht. Grundsätzlich möchte ich, wenn ich das Ansichtsmodell (BidAgent) für die Ansicht einstelle, den Text für das ausgewählte Element anzeigen, der explizit aus den Werten auf dem BidAgent erstellt wird. Irgendwelche Ideen wie man das macht?Autocollettebox: Wie man die Texteigenschaft bindet, um zu zeigen, was überhaupt vorgewähltes Einzelteil ist?

<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 hinter

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

Ansichtsmodell

 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 
            }; 
      } 
     } 

Antwort

0

Ist es möglich, dass das Objekt durch die SelectedAgent Eigenschaft und sein passenden Eintrag in der AvailableAgents Eigenschaft zurück ist in Fakt zwei zwei t Objektinstanzen, die gerade die gleichen Daten enthalten? Wenn ja, versuchen Sie, die übereinstimmende Instanz von AvailableAgents zu SelectedAgent zuzuweisen, sobald das Set zurückgegeben wurde.

+0

Es gibt nichts in den AvailableAgents, wenn das Formular geladen wird. Erst nachdem der Benutzer die Suche gestartet hat, wird es ausgefüllt. Dies dient zum Bearbeiten bestehender Datensätze. Also habe ich zunächst einige Werte, die ich in Autocomplete anzeigen lassen möchte. – epitka