2010-06-28 103 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