我正在编写一个程序,使用可观察的集合将膳食类型过滤到不同的类别.我正在使用枚举对膳食进行分类,并且我有三个单独的方法使用相同的代码,在单击各自的按钮时将它们分成新的集合.三种枚举类型是素食,肉类和鱼类.我有两个可观察的收藏品,餐和过滤餐.我试图创建另一种方法,然后传递类别作为参数,但我无法让它工作!任何帮助将不胜感激.
private void btnVegetarian_Click(object sender, RoutedEventArgs e)
{
filteredMeals = new ObservableCollection<Meal>();
Meal newMeal = new Meal();
for (int i = 0; i < meals.Count; i++)
{
newMeal = meals[i];
if (newMeal.Category == MealCategory.Vegetarian)
{
filteredMeals.Add(newMeal);
}
}
lbxMeals.ItemsSource = filteredMeals;
}
private void btnMeat_Click(object sender, RoutedEventArgs e)
{
filteredMeals = new ObservableCollection<Meal>();
Meal newMeal = new Meal();
for (int i = 0; i < meals.Count; i++)
{
newMeal = meals[i];
if (newMeal.Category == MealCategory.Meat)
{
filteredMeals.Add(newMeal);
}
}
lbxMeals.ItemsSource = filteredMeals;
}
private void btnFish_Click(object sender, RoutedEventArgs e)
{
filteredMeals = new ObservableCollection<Meal>();
Meal newMeal = new Meal();
for (int i = 0; i < meals.Count; i++)
{
newMeal = meals[i];
if (newMeal.Category == MealCategory.Fish)
{
filteredMeals.Add(newMeal);
}
}
lbxMeals.ItemsSource = filteredMeals;
}
Run Code Online (Sandbox Code Playgroud)
您需要创建一个采用MealCategory参数的新方法.将代码移动到那里,并为每个按钮单击处理程序传递适当的MealCategory.
然后代码可能如下所示:
private void btnVegetarian_Click(object sender, RoutedEventArgs e)
{
FilterMeals(MealCategory.Vegatarian);
}
private void btnMeat_Click(object sender, RoutedEventArgs e)
{
FilterMeals(MealCategory.Meat);
}
private void btnFish_Click(object sender, RoutedEventArgs e)
{
FilterMeals(MealCategory.Fish);
}
private void FilterMeals(MealCategory category)
{
filteredMeals = new ObservableCollection<Meal>();
Meal newMeal = new Meal();
for (int i = 0; i < meals.Count; i++)
{
newMeal = meals[i];
if (newMeal.Category == category)
{
filteredMeals.Add(newMeal);
}
}
lbxMeals.ItemsSource = filteredMeals;
}
Run Code Online (Sandbox Code Playgroud)
一旦你有了工作,你可以尝试重构你的FilterMeals方法更短.您可以使用LINQ来表示过滤器,并且ObservableCollection构造函数有一个重载IEnumerable<T>,它可以简化它:
private void FilterMeals(MealCategory category)
{
var filteredMeals = meals.Where(m => m.Category == category);
lbxMeals.ItemsSource = new ObservableCollection<Meal>(filteredMeals);
}
Run Code Online (Sandbox Code Playgroud)
| 归档时间: |
|
| 查看次数: |
97 次 |
| 最近记录: |