【问题标题】:Autocomletebox: How to bind the text property to show what ever selected item is?Autocompletebox:如何绑定文本属性以显示曾经选择的项目是什么?
【发布时间】:2010-12-10 19:25:26
【问题描述】:

无法弄清楚为什么在 ViewModel 中的 BidAgent 初始设置为某个值之后没有设置 Text 属性?搜索和选择工作正常,但初始绑定没有。基本上,我想要的是当我为视图设置视图模型 (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());
 }

视图模型

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

【问题讨论】:

    标签: silverlight autocompletebox


    【解决方案1】:

    SelectedAgent 属性返回的对象及其在AvailableAgents 属性中的匹配条目是否可能实际上是恰好包含相同数据的两个不同对象实例?如果是这样,请在返回集合后尝试将匹配的实例从 AvailableAgents 分配给 SelectedAgent

    【讨论】:

    • 表单加载时,AvailableAgents 中没有任何内容,只有在用户开始搜索后才会填充。这是用于编辑现有记录。所以最初我想在自动完成中显示一些值。
    猜你喜欢
    • 1970-01-01
    • 2019-11-18
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多