gpt4 book ai didi

c# - 如何在设置了ItemsSource的ComboBox顶部插入 “Select All”项目?

转载 作者:行者123 更新时间:2023-12-03 10:22:59 24 4
gpt4 key购买 nike

我有一个ComboBox,其ItemsSource设置为IList对象的MyClass。我覆盖了ComboBoxItemTemplate以在项目旁边显示一个CheckBox。我想在顶部显示一个“全选”的项目,当用户检查CheckBox时,代码将检查所有CheckBoxes。我的问题是,MVVM这样做的方式是什么?

我不想向MyClass添加单独的IList对象。看来这将涉及 View 与模型的过多耦合。有没有一种方法可以直接在XAML代码中添加项目,并为其提供一个Command来检查所有Checkboxes

我现在的ComboBox XAML是:

<ComboBox ItemsSource="{Binding MyList}" Width="200">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding Selected}" />
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>

看起来像:

我希望它看起来像:

我的MyClass就是这样:
public class MyClass
{
public string Name { get; set; }
public bool Selected { get; set; }
}

编辑:我找到了一种使用 the example here将项目添加到XAML代码中的集合的方法。当用户选中“全选”项目的复选框时,我仍然需要一种方式运行代码。要添加项目,代码是这样的:
<ComboBox Width="200">

<ComboBox.Resources>
<CollectionViewSource x:Key="comboBoxSource" Source="{Binding Path=MyList}" />
</ComboBox.Resources>

<ComboBox.ItemsSource>
<CompositeCollection>
<local:MyClass Name="Select All" Selected="False">
</local:MyClass>
<CollectionContainer Collection="{Binding Source={StaticResource comboBoxSource}}" />
</CompositeCollection>
</ComboBox.ItemsSource>

<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Name}" IsChecked="{Binding Selected}" />
</DataTemplate>
</ComboBox.ItemTemplate>

</ComboBox>

最佳答案

我个人只是修改CheckBox的模板,并在其中添加带有Click处理程序的自定义CheckBox,没有什么花哨的内容,易于理解。

http://msdn.microsoft.com/en-us/library/ms752094(v=vs.110).aspx

从那里您可以修改此部分:

<ScrollViewer Margin="4,6,4,6"
SnapsToDevicePixels="True">
<StackPanel IsItemsHost="True"
KeyboardNavigation.DirectionalNavigation="Contained" />
</ScrollViewer>

我要建模的另一种方法就是创建
public class MyClassViewModel
{
public string Name { get; set; }
public bool Selected { get; set; }

public ICommand Execute {get; set;}
}

并将自定义对象添加到您的IList。这将很好地工作,没有任何废话,您的 View 模型对 View 一无所知,并且可以测试。为每个人双赢。

关于c# - 如何在设置了ItemsSource的ComboBox顶部插入 “Select All”项目?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25493632/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com