Autocomletebox: Как связать свойство text, чтобы показать, что когда-либо был выбран элемент? - PullRequest
1 голос
/ 10 декабря 2010

Не могу понять, почему это не установка свойства Text после того, как BidAgent в ViewModel изначально установлен в какое-то значение? Поиск и выбор работает нормально, но начальная привязка - нет. По сути, я хочу, чтобы, когда я устанавливаю модель представления (BidAgent) для представления, он отображает текст для выбранного элемента, который создается явно из значений в BidAgent. Есть идеи как это сделать?

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

Код позади

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

1 Ответ

0 голосов
/ 11 декабря 2010

Возможно ли, что объект, возвращаемый свойством SelectedAgent и его соответствующей записью в свойстве AvailableAgents, на самом деле являются двумя отдельными экземплярами объекта, которые просто содержат одни и те же данные?Если это так, попробуйте назначить соответствующий экземпляр от AvailableAgents до SelectedAgent, как только набор будет возвращен.

...