2010-12-10 3 views
1

ViewModelのBidAgentがある値に初期設定された後に、これがTextプロパティを設定しないのはなぜですか?検索と選択はうまく動作しますが、初期バインディングは機能しません。基本的には、ビューのビューモデル(BidAgent)を設定し、BidAgentの値から明示的に作成された選択項目のテキストを表示するようにします。どのようにこれを行うにはどのようなアイデア?Autocomletebox:アイテムを選択したことを示すためにテキストプロパティをバインドするにはどうすればいいですか?

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

の後ろ

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

コードの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 
            }; 
      } 
     } 

答えて

0

それはAvailableAgentsプロパティにSelectedAgentプロパティとその一致するエントリによって返されるオブジェクトはでされている可能性があります事実2つのdistinc同じデータを含んでいるオブジェクトインスタンスその場合は、一致したインスタンスをAvailableAgentsからSelectedAgentに割り当てて、セットが返されたら試してみてください。

+0

フォームが読み込まれるときにAvailableAgentsには何も表示されません。ユーザーが検索を開始した後でのみ、そのページにデータが読み込まれます。これは、既存のレコードを編集するためのものです。だから最初は私はオートコンプリートで表示したいいくつかの値を持っています。 – epitka

関連する問題