我如何在另一个 ItemsControl 中绑定父 ItemsControl?

How i can Binding parent ItemControl inside another ItemControl?

我正在使用带有 MVVM 模式的 Wpf,所以在 Xamel 中我有一个 itemControl 持有另一个 itemcontrol 每个 itemcontrol 绑定来自不同的 ObservableCollection,结果它应该就像分组每个数据一样持有大量数据(类别和子类别) , 所以我从我的 viewmodel 绑定了 usercontrole 等等这是我的 viewModel 代码

public class BudgetViewModel:ViewModelBase,IBudgetViewModel
    {
          public BudgetViewModel(IBudgetLookupsDataService BudgetLookupsDataService)
           {
                  CategoryBudgets = new ObservableCollection<CategoryBudgetItemsViewModel>();
                  SubCategoryBudgets = new ObservableCollection<SubCategoryBudgetItemsViewModel>();
           }
         public async Task LoadBudgetCategories()
         {
          var categories = await _budgetLookupsDataService.GetBugetCategory();
        
            CategoryBudgets.Clear();
           if(categories.Count()!=0)
             {
             foreach (var cat in categories)
               {
                var subcategory = await _budgetLookupsDataService
                       .GetBudgetSubCategoriesPerMounth(DateforSearch, cat.IdCategory);
                CategoryBudgets.Add(new CategoryBudgetItemsViewModel(cat.IdCategory, 
                                    cat.CategoryName));
                foreach (var sub in subcategory)
                {
                   
                    SubCategoryBudgets.Add(new SubCategoryBudgetItemsViewModel(sub.IdSubCategory, 
                                         sub.SubCategoryName, sub.BudgetId, sub.BudgetPerMonth));
                }
               
              }
           }
        }
    } 

这里是 observable

里面的 class
public class CategoryBudgetItemsViewModel:ViewModelBase
{
   public CategoryBudgetItemsViewModel(int categoryId,string categoryName)
       {
               CategoriesId = categoryId;
               CategoriesName = categoryName;
       }
     public int CategoriesId { get; set; }
  
    public string CategoriesName
    {
        get { return _categoriesName; }
        set 
        { 
            
            _categoriesName = value; 
            OnPropertyChanged();
            
        }
    }
}

和下一个可观察的 class

 public class SubCategoryBudgetItemsViewModel: ViewModelBase
 {
    public SubCategoryBudgetItemsViewModel(int subcategoryId, string subcategoryname,
        int? idBudget, decimal budgetAmount)
         {
               SubCategoryId = subcategoryId;
               SubCategoryName = subcategoryname;
                BudgetId = idBudget;
              BudgetAmount = budgetAmount;
          }
              public int SubCategoryId { get; set; }
    public int? BudgetId { get; set; }
    public string SubCategoryName
    {
        get { return _subcategoryname; }
        set { _subcategoryname = value; OnPropertyChanged(); }
    }

    public decimal BudgetAmount
    {
        get { return _budgetamount; }
        set
        {
            _budgetamount = value;
            OnPropertyChanged();
        }
      }
   }

和我的 Xamel 代码:

       <ItemsControl x:Name="Item"  ItemsSource="{Binding CategoryBudgets}" >
                        <ItemsControl.ItemTemplate>
                            <DataTemplate>
                                <Grid x:Name="GrdData" >
                                    <Expander Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" 
                                   Header="{Binding CategoriesName}" Cursor="Hand" IsExpanded="True">
                                        <ItemsControl  ItemsSource="{Binding SubCategoryBudgets}" >
                                             <ItemsControl.ItemTemplate>
                                                      <DataTemplate>
                                                                                                                                           
                                                 <TextBlock Text="{Binding SubCategoryId}"/>

                                                      </DataTemplate>
                                              </ItemsControl.ItemTemplate>
                                      </ItemsControl>
                                   </Expander>
                                </Grid>
                             </DataTemplate>
                        </ItemsControl.ItemTemplate>
                      </ItemsControl>

当我 运行 Expander 渲染和绑定工作正常但另一个 itemcontrol 它根本不起作用 所以我的问题是为什么内部 itemcontrol 不起作用,感谢大家

Finlay 子 itemcontrol 像父 itemcontrol 一样工作得很好 :),我做了一些小改动,这是 CategoryBudgetItemsViewModel

中的变化
public class CategoryBudgetItemsViewModel : ViewModelBase
  {
public CategoryBudgetItemsViewModel(int categoryId, string categoryName)
{
    CategoriesId = categoryId;
    CategoriesName = categoryName;
   SubCategoryBudgets = new ObservableCollection<SubCategoryBudgetItemsViewModel>();
}
public int CategoriesId { get; set; }

public ObservableCollection<SubCategoryBudgetItemsViewModel> SubCategoryBudgets { get; set; }

public string CategoriesName
{
    get { return _categoriesName; }
    set
    {

        _categoriesName = value;
        OnPropertyChanged();

     }
  }
}

并且我在 CategoryBudgetItemsViewModel 中填充了 SubCategoryBudgets。这是 Xamel 代码:

<ItemsControl x:Name="Item"  ItemsSource="{Binding CategoryBudgets}" >
                    <ItemsControl.ItemTemplate>
                        <DataTemplate>
                            <Grid x:Name="GrdData" >
                                <Expander Grid.Row="0" Grid.Column="1" Grid.ColumnSpan="2" 
                               Header="{Binding CategoriesName}" Cursor="Hand" IsExpanded="True">
                                    <ItemsControl  ItemsSource="{Binding Path=SubCategoryBudgets}"
                                         <ItemsControl.ItemTemplate>
                                                  <DataTemplate>
                                                                                                                                       
                                             <TextBlock Text="{Binding Path=SubCategoryId}/>

                                                  </DataTemplate>
                                          </ItemsControl.ItemTemplate>
                                  </ItemsControl>
                               </Expander>
                            </Grid>
                         </DataTemplate>
                    </ItemsControl.ItemTemplate>
                  </ItemsControl>

感谢@Clemens、@user1672994 和@icode 为我提供的帮助, 谢谢大家