2010-06-30 5 views
0

콜렉션() {true, false, false, false, false, false, false, false}과 관련된 bool 컬렉션이 있습니다. 그래서 bool이 나타내는 것은 일요일 (일요일은 여기 일주일의 첫날 임)에이 컬렉션이 적용됨을 의미합니다.콜렉션 바인드 <bool> togglebuttons/checkboxed

이제는 내 목록 상자의 itemssource를이 컬렉션으로 설정했습니다.

<ListBox ItemsSource={Binding Path=Collection, Mode=TwoWay}> 
    <ListBox.ItemTemplate> 
     <ToggleButton IsChecked={Binding Path=BoolValue, Mode=TwoWay}/> 
    </ListBox.ItemTemplate> 
</ListBox> 

그러나 내 컬렉션은 업데이트되지 않습니다 (내 컬렉션은 창에서 종속 스키마입니다). Plus "MyBool"클래스는 NotifyPropertyChanged가 구현 된 bool 객체 주위의 단순한 래퍼입니다.

모든 아이디어 ..... 내 실제 코드는 중대하게 복잡하므로 위의 상황은 잔인하게 단순화 된 버전이므로 필요한 경우 가정 등을 작성하십시오. 크게 사전에

감사합니다,

U.

답변

1

보십시오 당신이

<ToggleButton IsChecked={Binding Path=BoolValue, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}/> 

편집 바인딩의 UpdateSourceTrigger =하여 PropertyChanged을 설정 : 는 작은 예제를 만들어, 잘 보인다.

래퍼 클래스의 또 다른 모습을 걸릴 것

public class MyBool : INotifyPropertyChanged 
{ 
    private bool _value; 

    public bool Value 
    { 
     get { return _value; } 
     set 
     { 
      _value = value; 
      NotifyPropertyChanged("Value"); 
     } 
    } 

    public event PropertyChangedEventHandler PropertyChanged; 

    void NotifyPropertyChanged(string propertyName) 
    { 
     if (PropertyChanged != null) 
     { 
      PropertyChanged(this, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 

XAML 또한 메신저 두려워 아무것도하지 않는 것 같다

/// <summary> 
/// Interaction logic for MainWindow.xaml 
/// </summary> 
public partial class MainWindow : Window 
{ 
    public ObservableCollection<MyBool> Users { get; set; } 
    public MainWindow() 
    { 
     InitializeComponent(); 
     Users = new ObservableCollection<MyBool>(); 
     DataContext = this; 
     Loaded += new RoutedEventHandler(MainWindow_Loaded); 

    } 

    void MainWindow_Loaded(object sender, RoutedEventArgs e) 
    { 
     FillUsers(); 
    } 

    private void FillUsers() 
    { 

     for (int i = 0; i < 20; i++) 
     { 
      if(i%2 == 0) 
       Users.Add(new MyBool { Value = true }); 
      else 
       Users.Add(new MyBool { Value = false}); 
     } 
    } 
} 
+0

뒤에

 <ListBox ItemsSource="{Binding Path=Users}" > <ListBox.ItemTemplate> <DataTemplate> <StackPanel> <ToggleButton IsChecked="{Binding Path=Value, Mode=TwoWay}" Content="MyButton"/> </StackPanel> </DataTemplate> </ListBox.ItemTemplate> </ListBox> 

코드를 .... 아침에 아무 것도 발견하지 못하면 답글 – urema

+0

내가 도와 줄 수있는 일종의 코드없이이 일을하는 것처럼 보인다. 데이트 .... 누구 직접 바인딩으로 어떤 생각을 가지고 ??? 감사합니다. U – urema

+0

은 정확한 코드를 게시 한 xaml입니다. – hkon