在Windows Phone 7中搜索ListBox中的项目

时间:2014-01-24 09:41:46

标签: c# windows-phone-7 mvvm listbox

我想在列表框中搜索名称。我在我的应用程序中使用MVVM模式。

我的Xaml编码列表框

 <ListBox  Height="440" Background="Azure" ItemsSource="{Binding Content,Mode=TwoWay}" HorizontalAlignment="Left" Margin="0,230,0,0" Name="OutGoingInvitationList" VerticalAlignment="Top" Width="468" BorderBrush="#00565353" SelectionChanged="listBox1_SelectionChanged">
                    <ListBox.ItemTemplate>
                        <DataTemplate>
                            <StackPanel Orientation="Horizontal">
                            <Image Name="ListPersonImage" Source="{Binding ListImage}" Height="100" Width="100" Stretch="Uniform" Margin="10,2,0,0" ImageFailed="Image_ImageFailed" />
                                <TextBlock Text="{Binding ListFullName}" Name="ListPersonFullName" Width="200" Foreground="Black" Margin="10,10,0,0" FontWeight="SemiBold" FontSize="22" />
                                <TextBlock Text="{Binding ListBio}" Name="ListPersonBio" FlowDirection="LeftToRight" Foreground="Black" Margin="-200,50,0,0" FontWeight="ExtraLight" FontSize="20" />
                            </StackPanel>
                        </DataTemplate>
                    </ListBox.ItemTemplate>
                </ListBox>

此处内容包含所有列表值。 现在它显示了结果。现在我想搜索人名。我想在

中编写代码
private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
      {
      }  

是否可以搜索列表框中的名称。在这里,我只想显示列表框搜索项目中的项目。对不起英语很差。

请告诉我如何执行此操作。

提前致谢..

我的视图模型:

 invitationsButton = new ReactiveAsyncCommand();

        var invitationResults = invitationsButton.RegisterAsyncObservable(_ =>
        {
            return HTTPServices.postAndGetResponse((new PersonSearchOperation().GetInvitations(ServiceConstants.Identity_Number)));
        });

        invitationResults.Subscribe(
         x =>
         {

             ServiceModel sm = new ServiceModel();
             Content = new List<ListContactsModel>();
             Content1 = new List<ListContactsModel>();
             ServiceConstants.Temp_Response = x;
             List<ListContactsModel> result = ListContactsModel.extract(x, sm, OutGoingInvitation);

             if (!((string.IsNullOrEmpty(sm.NetErrorCode)) && (string.IsNullOrEmpty(sm.ProvResErrCode))))
             {
                 string errCode = !string.IsNullOrEmpty(sm.NetErrorCode) ? sm.NetErrorCode : sm.ProvResErrCode;
                 string errDesc = !string.IsNullOrEmpty(sm.NetErrorDesc) ? sm.NetErrorDesc : sm.ProvResErrDesc;
                 MessageBox.Show(errCode + "/" + errDesc);
             }
             else if (result.Count > 0)
             {
                 Content.AddRange(result);//Outgoing Invitations

             }
             else
             {
                 MessageBox.Show("There is No Invitations For You"); //Use Resource Bundle
             }
         }
        );

现在内容有了所有结果。 请告诉我现在我必须在哪里实施搜索操作? 其实我不知道我在哪里写搜索操作码?

在我的视图模型中,我添加了此代码。我可以在控制台窗口中看到输出。但是UI没有更新。

 public void SearchMethod(String searchValue)
    {

        Console.WriteLine("searchValue...." + searchValue);
        Console.WriteLine("ServiceConstants.Temp_Response ...." + ServiceConstants.Temp_Response);
        AppGlobalConstants.Temp_SearchValue = searchValue;
        ServiceModel sm = new ServiceModel();
        Content = new List<ListContactsModel>();
        List<ListContactsModel> result = ListContactsModel.extract(ServiceConstants.Temp_Response, sm, OutGoingInvitation);

        if (!((string.IsNullOrEmpty(sm.NetErrorCode)) && (string.IsNullOrEmpty(sm.ProvResErrCode))))
        {
            string errCode = !string.IsNullOrEmpty(sm.NetErrorCode) ? sm.NetErrorCode : sm.ProvResErrCode;
            string errDesc = !string.IsNullOrEmpty(sm.NetErrorDesc) ? sm.NetErrorDesc : sm.ProvResErrDesc;
            MessageBox.Show(errCode + "/" + errDesc);
        }
        else if (result.Count > 0)
        {

            Content.AddRange(result);
            Console.WriteLine("Content.Count==>>" + Content.Count);
        }

    }

在我的CS文件中

   private void OnTextBoxTextChanged(object sender, TextChangedEventArgs e)
    {

            listContactsViewModel.SearchMethod(userIDTextBox.Text);
    }

对不起。我是windows手机应用程序开发的新手。实际上这是我的第一个项目。这就是我不知道的原因。请告诉我在哪里必须做出改变?

1 个答案:

答案 0 :(得分:0)

在您的ViewModel中,您应该拥有一个私人收藏集来保存原始列表,同时您可以在内容中设置搜索结果。

在您的viewmodel

private List<YourClass> orignalList;

public void Search(string query)
{
    // do your query
    List<YourClass> list = get...;

    // clear content
    Content.Clear();

    foreach(var item in list)
    {
       Content.Add(item)
    }
 }

如果清除查询,则使用orignalList填充内容。

请务必将内容设置为ObservableCollection