将ItemsControl Items属性绑定到源对象外部。

问题描述 投票:0回答:1

我有一个类型为 菜单模式 叫做 菜单列表 在我的ViewModel里面。我使用的是CaliburnMicro框架

我想把这个列表显示为具有以下功能的ToggleButtons的列表。IsChecked 属性绑定到其他对象列表,称为 精选菜单星期一,它是类型的列表 选择的菜单模式 只有IsSelected属性,且长度与MenuList相同。

MenuModel看起来像这样。

public class MenuModel
{
    public int MenuKey { get; set; }
    public string MenuName { get; set; }
    public string Description { get; set; }
}

MenuList.MenuModel看起来像这样:

public List<MenuModel> MenuList
{
    get { return _MenuList; }
    set => Set(ref _MenuList, value);
}

SelectedMenuModel

public class SelectedMenuModel
{
    public bool IsSelected { get; set; }
}

和SelectedMenusMonday列表。

private BindableCollection<SelectedMenuModel> _SelectedMenusMonday = new BindableCollection<SelectedMenuModel>();

public BindableCollection<SelectedMenuModel> SelectedMenusMonday
{
    get { return _SelectedMenusMonday; }
    set => Set(ref _SelectedMenusMonday, value);
}

我想这样显示

          <ItemsControl x:Name="MondayMenuList" ItemsSource="{Binding MenuList}" >
               <ItemsControl.ItemTemplate>
                     <DataTemplate>
                         <ToggleButton Content="{Binding MenuName}" IsChecked="{Binding Path=DataContext.SelectedMenusMonday.IsSelected, RelativeSource={RelativeSource AncestorType={x:Type Window}}}">
                          </ToggleButton>
                      </DataTemplate>
                 </ItemsControl.ItemTemplate>
           </ItemsControl>

周一的MenuList和SelectedMenus从SQL DB中得到填充。这是我试过的解决方案,但它不工作。谁能帮助我,请 我想让ToggleButtons在SelectedMenusMonday上的项目有IsSelected属性时被 "选中"。

非常感谢您

c# wpf mvvm caliburn.micro
1个回答
0
投票

在你的视图中命名根元素(或者任何你知道DataContext是正确的地方),然后使用 ElementName 绑定,如图所示。

<UserControl x:Name="view">
  <Grid>
    <ItemsControl x:Name="MondayMenuList" ItemsSource="{Binding MenuList}" >
       <ItemsControl.ItemTemplate>
         <DataTemplate>
           <ToggleButton Content="{Binding MenuName}" IsChecked="{Binding ElementName=view, Path=DataContext.SelectedMenusMonday}">
           </ToggleButton>
         </DataTemplate>
       </ItemsControl.ItemTemplate>
     </ItemsControl>
  </Grid>
</UserControl>

注意 x:Name="view"UserControl 元素。

© www.soinside.com 2019 - 2024. All rights reserved.