我想在列表框中搜索名称。我在我的应用程序中使用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手机应用程序开发的新手。实际上这是我的第一个项目。这就是我不知道的原因。请告诉我在哪里必须做出改变?
答案 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