因此,我列出了所有可能的值,以及仅出现一次的出现值列表。与 [A,B,C,D,E]和[D,A],一样,第二个列表中的每个元素也必须是第一个元素的成员。
我想创建一个每个可能值一行的列表视图,其中每一行都是一个复选框,将内容绑定到值的名称,并将IsChecked绑定到类似occuringValues.contains(possibleValue)的内容。在我的例子中,这看起来像:
[x] A
[ ] B
[ ] C
[x] D
[ ] E
选中或取消选中复选框应在发生值列表中添加或删除元素。
我尝试了许多没有太多运气的方法,例如:
创建一个带有字符串和bool(用于IsChecked)的INotifyPropertyChanged实现帮助器类和一个ObservableCollection让我可以控制我的类中的更改,但是类中的更改不会触发我的ObservableCollection的set函数,否则我可以在那里更新我的 [D,A] 列表。
我可以更改我的GUI以简化操作,列出occuringValues并使用possibleValues创建一个comboBox,但如果您对我有所了解,我更喜欢使用复选框。
答案 0 :(得分:2)
所以我设法以安德鲁斯建议的灵感来解决这个问题。
我添加了一个这样的包装类:
class MyOccExpLimitComment
{
private ObservableCollection<OccupationalExposureLimitComment> Occuring;
public MyOccExpLimitComment(ObservableCollection<OccupationalExposureLimitComment> occuring, OccupationalExposureLimitComment inner)
{
Occuring = occuring;
Inner = inner;
}
public OccupationalExposureLimitComment Inner { get; set; }
public bool IsChecked
{
get
{
return Occuring.Contains(Inner);
}
set
{
if (value == false)
{
if (Occuring.Contains(Inner))
Occuring.Remove(Inner);
}
else
if (!Occuring.Contains(Inner))
Occuring.Add(Inner);
}
}
}
XAML:
<ListView ItemsSource="{Binding Path=MyOccExpLimitComments}" Grid.ColumnSpan="3" Grid.Column="0" HorizontalAlignment="Left" Height="153" Margin="2,2,0,0" Grid.Row="8" VerticalAlignment="Top" Width="296">
<ListView.View>
<GridView>
<GridViewColumn Width="269">
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding IsChecked}" Content="{Binding Inner.Title_SV}"/>
</DataTemplate>
</GridViewColumn.CellTemplate>
</GridViewColumn>
</GridView>
</ListView.View>
</ListView>
属性:
private ObservableCollection<MyOccExpLimitComment> myOccExpLimitComments;
public ObservableCollection<MyOccExpLimitComment> MyOccExpLimitComments
{
get
{
if (myOccExpLimitComments == null)
myOccExpLimitComments = new ObservableCollection<MyOccExpLimitComment>(AvailableOccExpLimitComments.Select(c => new MyOccExpLimitComment(OccExpLimitComments, c)));
return myOccExpLimitComments;
}
}
因此,我的集合中的每个元素都通过对集合的Occuring引用了解它在集合中的存在,并在选中/取消选中框时使用setter更新集合。