将组合框中的复选框设置为选中wpf
本文关键字:wpf 设置 组合 复选框 | 更新日期: 2023-09-27 18:11:49
我创建了一个自定义wpf控件——本质上是一个带复选框的combox。组合框已成功绑定到一个项目列表。
这是我的xaml代码
<ComboBox Height="28" HorizontalAlignment="Left" Margin="106,7,0,0" Name="comboBox1" VerticalAlignment="Top" Width="174" ItemsSource="{Binding Names}">
<ComboBox.ItemTemplate>
<DataTemplate>
<CheckBox Name="ckabc" Content="{Binding}" CommandParameter="{Binding}"/>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
我的代码是这样的:
private List<string> names;
public List<string> Names
{
get { return names; }
set
{
names = value;
this.OnPropertyChanged(new PropertyChangedEventArgs("Names"));
}
}
Names = new List<string> { "Sensor Not Connected", "Poor Signal Quality", "Excessive Light", "PreAmp Not Connected", "Replace Sensor", "Interference Detected", "Sensor Unusable", "Sensor Change" };
this.OnPropertyChanged(new PropertyChangedEventArgs("Names"));
我已经为每个列表项创建了属性:
public string SensorNotConnected
{
get
{
return Names.ElementAt(0);
}
set
{
this.emuObj.SensorNotConnected(Convert.ToBoolean(value), channelIndex);
}
}
以同样的方式为其他列表项创建属性。我的想法是绑定复选框的Ischecked属性并迭代。但是我怎么能做到呢?用户可以选择一个复选框或多个复选框。请给出一些答案。
p。S:我用的是MVVM模型。
下面是如何解决这个问题的一个简单示例。解决方案使用Mvvm Light,但这不是必需的。您可以创建一个类(在本例中为"Name"),而不是只有一个List<string>
,它具有一个可以绑定到的bool IsChecked属性。参见<CheckBox Grid.Column="1" Name="ckabc" IsChecked="{Binding IsChecked}"/>
行,这是我们绑定IsChecked属性的地方。
<Window x:Class="CustomControlWpf.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="MainWindow" Height="350" Width="525"
DataContext="{Binding Source={StaticResource Locator}, Path=Main}">
<Grid>
<ComboBox Height="28" HorizontalAlignment="Left" Margin="106,7,0,0" VerticalAlignment="Top" Width="174" ItemsSource="{Binding Names}">
<ComboBox.ItemTemplate>
<DataTemplate>
<Grid>
<Grid.ColumnDefinitions><ColumnDefinition></ColumnDefinition><ColumnDefinition></ColumnDefinition></Grid.ColumnDefinitions>
<TextBlock Text="{Binding Description}"></TextBlock>
<CheckBox Grid.Column="1" Name="ckabc" IsChecked="{Binding IsChecked}"/>
</Grid>
</DataTemplate>
</ComboBox.ItemTemplate>
</ComboBox>
</Grid>
public class Name
{
public string Description { get; set; }
public bool IsChecked { get; set; }
}
}
ViewModel:
public class MainViewModel : ViewModelBase
{
/// <summary>
/// Initializes a new instance of the MainViewModel class.
/// </summary>
public MainViewModel()
{
Names = new List<Name>() { new Name { Description = "Name1", IsChecked = false }, new Name { Description = "Name2", IsChecked = false } };
}
private List<Name> _names;
public List<Name> Names
{
get { return _names; }
set
{
_names = value;
RaisePropertyChanged(() => Names);
}
}
}