【问题标题】:Binding ItemsControl Items Property to outside Source Object将 ItemsControl Items 属性绑定到外部源对象
【发布时间】:2020-09-30 08:23:46
【问题描述】:

我的 ViewModel 中有一个名为 MenuList 的类型为 MenuModel 的对象列表。我正在使用 CaliburnMicro 框架

我想将此列表显示为具有 IsChecked 属性的 ToggleButtons 列表,该属性绑定到名为 SelectedMenusMonday 的其他对象列表,该列表类型为 SelectedMenuModel 仅具有 IsSelected 属性,并且与 MenuList 的长度相同。

MenuModel 如下所示:

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

菜单列表:

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 Monday 由 SQL DB 填充。这是我尝试过的解决方案,但它不起作用。有人能帮助我吗!如果 SelectedMenusMonday 上的项目的 IsSelected 属性为 true,我希望 ToggleButtons 被“选中”。

非常感谢!

【问题讨论】:

  • 您可以查看输出窗口是否有绑定异常,也可以使用snoop等第三方应用来挖掘绑定异常。

标签: c# wpf mvvm caliburn.micro


【解决方案1】:

在您的视图中命名根元素(或任何您知道 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>

注意UserControl 元素中的x:Name="view"

【讨论】:

  • 感谢您的评论,但这并没有帮助。仍然未选中所有切换按钮。我也尝试在 SelectedMenusMonday 的末尾添加 .IsSelected,但没有做任何事情。
猜你喜欢
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2012-04-11
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
相关资源
最近更新 更多