How do you get values for your CollectionViewSource? I understand it is bound to only one attribute value but is it from a GraphicCollection?You may also need to update your Binding statement for ListBox.ItemsSource to since you are pointing to a resourceItemsSource="{Binding Source={StaticResource cvs}}"
To demonstrate how you can filter using CollectionViewSource, I updated this SDK sample: http://help.arcgis.com/en/webapi/silverlight/samples/start.htm#QueryWithoutMapXAML-code changes: DataGrid.ItemsSource is set through binding to CollectionViewSource
<Grid.Resources>
<CollectionViewSource x:Key="MyCollectionViewSource"/>
</Grid.Resources>
<slData:DataGrid x:Name="QueryDetailsDataGrid" AutoGenerateColumns="False" HeadersVisibility="Column" Background="White"
IsReadOnly="True" Canvas.Left="10" Canvas.Top="50" Height="140" Width="530"
HorizontalScrollBarVisibility="Hidden"
ItemsSource="{Binding Source={StaticResource MyCollectionViewSource}}"
>
Code-behind changes: Query once and update cvs.Source on Button.Click.
public MainPage()
{
InitializeComponent();
cvs = LayoutRoot.Resources["MyCollectionViewSource"] as CollectionViewSource;
QueryTask queryTask =
new QueryTask("http://sampleserver1.arcgisonline.com/ArcGIS/rest/services/Demographics/ESRI_Census_USA/MapServer/5");
queryTask.ExecuteCompleted += QueryTask_ExecuteCompleted;
queryTask.Failed += QueryTask_Failed;
ESRI.ArcGIS.Client.Tasks.Query query = new ESRI.ArcGIS.Client.Tasks.Query();
query.Where = "1=1";
query.OutFields.Add("*");
queryTask.ExecuteAsync(query);
}
CollectionViewSource cvs;
void QueryButton_Click(object sender, RoutedEventArgs e)
{
cvs.View.Filter = g =>
{
var graphic = g as Graphic;
if ((graphic.Attributes["STATE_NAME"] as string).ToLower().StartsWith(StateNameTextBox.Text.Trim().ToLower()))
return true;
return false;
};
}
void QueryTask_ExecuteCompleted(object sender, ESRI.ArcGIS.Client.Tasks.QueryEventArgs args)
{
FeatureSet featureSet = args.FeatureSet;
if (featureSet != null && featureSet.Features.Count > 0)
cvs.Source = featureSet.Features;
else
MessageBox.Show("No features returned from query");
}