Skip to content

Instantly share code, notes, and snippets.

View rdelrosario's full-sized avatar

Rendy Del Rosario rdelrosario

View GitHub Profile
<ContentPage.ToolbarItems>
<ToolbarItem Text="Sort" Command="{Binding SortCommand,Mode=OneTime}"/>
</ContentPage.ToolbarItems>
...
namespace DynamicDataGroupingSample
{
public class MainViewModel : ReactiveObject, IDisposable
{
public MainViewModel()
{
...
//Filter logic
Func<Restaurant, bool> countryFilter(string country) => restaurant =>
{
<Picker Title="Choose Country
SelectedItem="{Binding SelectedCountryFilter}">
<Picker.Items>
<x:String>All</x:String>
<x:String>United States</x:String>
<x:String>Venezuela</x:String>
<x:String>Dominican Republic</x:String>
<x:String>Colombia</x:String>
</Picker.Items>
</Picker>
namespace DynamicDataGroupingSample
{
public class MainViewModel : ReactiveObject, IDisposable
{
public MainViewModel()
{
// Initial data
_sourceCache.AddOrUpdate(new List<Restaurant>()
{
new Restaurant("Yao","Casual","Asian Fusion","Dominican Republic"),
<SearchBar Text="{Binding SearchText}" />
<ListView ItemsSource="{Binding Restaurants}">
<ListView.ItemTemplate>
<DataTemplate x:DataType="local:Restaurant">
<TextCell Text="{Binding Name}"
Detail="{Binding Type}"/>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
_cleanUp = _sourceCache.Connect()
.RefCount()
.Filter(filterPredicate)
.Bind(out _restaurants)
.DisposeMany()
.Subscribe();
var filterPredicate = this.WhenAnyValue(x => x.SearchText)
.Throttle(TimeSpan.FromMilliseconds(250), RxApp.TaskpoolScheduler)
.DistinctUntilChanged()
.Select(restaurantFilter);
Func<Restaurant, bool> restaurantFilter(string text) => restaurant =>
{
return string.IsNullOrEmpty(text) || restaurant.Name.ToLower().Contains(text.ToLower()) || restaurant.Type.ToLower().Contains(text.ToLower());
};
namespace DynamicDataGroupingSample
{
public class MainViewModel : ReactiveObject
{
public MainViewModel() { ... }
public string SearchText
{
get => _searchText;
set => this.RaiseAndSetIfChanged(ref _searchText, value);
_sourceCache.Edit((update) =>
{
update.Remove(restaurant);
});