2010-06-28 119 views
0

绑定值复选框

class Student 
{ 
public List<Degree> Degrees {get;set;} 

} 

class Degree 
{ 
public Subject Subject{get;set;} 

public int Value {get;set;} 
} 

class Subject 
{ 
English =0, 
Germany = 1, 
Biology=2 
} 

而且我有一个TreeView

<HierarchicalDataTemplate DataType="{x:Type MyService:Student}" > 
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="English: "/> 
<CheckBox IsChecked="{Binding Path=Degrees.Where(d=>d.Subject==English).First()}, Converter={StaticResource degreeToBoolIsPassed}"> </CheckBox> 
<TextBlock TextAlignment="Justify" VerticalAlignment="Center" Text="Germany: "/> 
<CheckBox IsChecked="{Binding Path=Degrees.Where(d=>d.Subject==Germany).First()}, Converter={StaticResource degreeToBoolIsPassed}"> </CheckBox> 
etc 

建筑的归类不能改变,degreeToBoolIsPassed是很容易做到,所以我只是想xaml,或者这个控件的.cs。 我知道:

<CheckBox IsChecked="{Binding Path=Degrees.Where(d=>d.Subject==Germany).First()}, Converter={StaticResource degreeToBoolIsPassed}"> </CheckBox> 

不起作用。这只是我想要的例子。

重要的东西:

每个学生必须有4个复选框

回答

1

您将需要一个ValueConverter:

绑定到学位:

IsChecked="{Binding Path=Degrees, Converter={StaticResource DegreesConverter}, ConverterParameter={x:Static namespace:Subject.Germany}} 

地方实现一个很好的转换器:

public class DegreesConverter: IValueConverter 
{ 
    #region IValueConverter Members 

    public object Convert(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     List<Degree> degrees = (List<Degree>) value; 
     return degrees.Any(d => Equals(d.Subject, (Subject)parameter)); 
    } 

    public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture) 
    { 
     throw new NotImplementedException(); 
    } 

    #endregion 
} 

在资源注册您的转换器某处的关键DegreesConverter下,像这样:

<namespace:DegreesConverter x:Key="DegreesConverter" /> 

注意,命名空间前缀也应该在你使用这个东西的控制进行登记,但我想你会知道这个怎么做!

祝你好运!

+0

令人惊叹!非常感谢你 ! – user278618 2010-06-28 11:15:47

+0

没问题;;) – Arcturus 2010-06-28 11:19:21