我有以下xaml:
<ItemsControl ItemsSource="{Binding ResearchLanguageViewModel.Filters, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Type}"></TextBlock>
<TextBox Text="Search...."></TextBox>
<ItemsControl>
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding Path=Values}"></CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
使用以下对象/集合:
public class FilterViewModel
{
public string Type { get; set; }
public ObservableCollection<string> Values { get; set; }
}
public class ResearchLanguageViewModel
{
public int FirmCount { get; set; }
public ObservableCollection<FilterViewModel> Filters { get; set; }
}
我正在尝试绑定Filters属性,Type属性很好。但是,我无法将字符串的Values集合显示为一组复选框。不知道我在这里做错了什么......
答案 0 :(得分:2)
将项控件ItemSource属性绑定到值。
对于字符串,您甚至不需要模板。在您的模型中,您有一组字符串,因此绑定到复选框模板确实提供了一些UI增强功能,但我的下注是您希望在视图模型中显示已检查状态。
您可能需要考虑创建一个对象来封装您的标签和Checked状态,并根据它来定义您的收藏。
public class CheckModel
{
public string Label {get; set;}
public bool Checked { get; set; }
}
然后将您的复选框绑定到:
<CheckBox IsChecked="{Binding Checked}" Content="{Binding Label}" />
我希望这会有所帮助。
答案 1 :(得分:2)
Values
是一个数组,您正在尝试(我假设)创建一个Checkboxes
数组,其中每个复选框的值都是该数组的索引值。
在模型中,您将值数组传递到一个复选框控件的内容中。您需要做的是将数组绑定到父ItemsSource
并将新值绑定到Checkbox
控件的内容。像这样:
<ItemsControl ItemsSource="{Binding ResearchLanguageViewModel.Filters, Mode=OneWay}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<StackPanel>
<TextBlock Text="{Binding Path=Type}"></TextBlock>
<TextBox Text="Search...."></TextBox>
<ItemsControl>
<ItemsControl.ItemTemplate ItemsSource={Binding Path=Values}>
<DataTemplate>
<CheckBox Content="{Binding Mode=TwoWay}"></CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
答案 2 :(得分:1)
您需要将Values
绑定到ItemsControl
而不是Checkbox
,
<StackPanel>
<TextBlock Text="{Binding Path=Type}"></TextBlock>
<TextBox Text="Search...."></TextBox>
<ItemsControl ItemsSource="{Binding Values}">
<ItemsControl.ItemTemplate>
<DataTemplate>
<CheckBox Content="{Binding}"></CheckBox>
</DataTemplate>
</ItemsControl.ItemTemplate>
</ItemsControl>
</StackPanel>