我有以下项目数据类,以及一个转换器。
class ListBoxViewItem
{
public String Name { get; set; }
public Boolean IsChecked { get; set; }
}
[ValueConversion(typeof(List<String>),typeof(List<ListBoxViewItem>))]
class ListToItemConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value == null) return null;
IEnumerable<String> l = value as IEnumerable<String>;
return (from n in l select new ListBoxViewItem() { IsChecked = true, Name = n });
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
class ListBoxData
{
public List<String> AllData
{
get
{
return new List<string>()
{
"FOO",
"BAR"
};
}
set
{
}
}
}
我将 的实例绑定ListBoxData
到列表框控件的ItemsSource
. 如下:
<ListBox>
<ListBox.ItemsSource>
<Binding>
<Binding.Path>AllData</Binding.Path>
<Binding.Converter>
<local:ListToItemConverter />
</Binding.Converter>
<Binding.Mode>TwoWay</Binding.Mode>
</Binding>
</ListBox.ItemsSource>
<ListBox.ItemTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked,Mode=TwoWay}"
Content="{Binding Name}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
所以我的问题是,Convert
当列表框显示时调用该函数,但是由于此列表框中的每个项目都是一个复选框,虽然我使用TwoWay
绑定来绑定实例和列表框,但是ConvertBack
当我选中/取消选中复选框时不会调用这个列表框。
我不确定是否ConvertBack
设计为按预期工作。但是,如果我想ConvertBack
在检查状态更改时触发可以,我该怎么办?