2012-11-02 39 views
0

我遇到了問題,我不確定它是什麼。我有一個類中有一個類需要綁定到一個控件,在這種情況下,可見性。該代碼是正確的變化值,但輸出沒有變化(即崩潰控制)要麼在子類中綁定屬性,要麼綁定問題

<Grid x:Name="ContentPanel" Grid.Row="1" Margin="12,0,12,0"> 
     <StackPanel Orientation="Vertical"> 
      <Button x:Name="buttonOne" Content="Show Hide" Width="Auto" Click="buttonOne_Click"/> 

     <ListBox x:Name="aListBox"> 
      <ListBox.ItemTemplate> 
       <DataTemplate> 
        <Grid> 
         <Grid.ColumnDefinitions> 
          <ColumnDefinition Width="Auto"/> 
          <ColumnDefinition Width="Auto"/> 
         </Grid.ColumnDefinitions> 
          <TextBlock x:Name="blockOne" Grid.Column="0" Text="Raw "/> 
          <TextBlock x:Name="blockTwo" Grid.Column="1" Text="{Binding aValue}" Visibility="{Binding Path=visControl.VisibleState, BindsDirectlyToSource=True}"/> 
        </Grid> 
       </DataTemplate> 
      </ListBox.ItemTemplate> 
     </ListBox> 
     </StackPanel> 

    </Grid> 

公共部分類的MainPage:的PhoneApplicationPage {

private List<myClass> listOfClasses = new List<myClass>(); 
    // Constructor 
    public MainPage() 
    { 

     myClass classA = new myClass("one"); 
     myClass classB = new myClass("two"); 
     myClass classC = new myClass("three"); 
     listOfClasses.Add(classA); 
     listOfClasses.Add(classB); 
     listOfClasses.Add(classC); 


     InitializeComponent(); 
     aListBox.ItemsSource = listOfClasses; 
    } 

    private void buttonOne_Click(object sender, RoutedEventArgs e) 
    { 
     foreach (myClass cl in listOfClasses) 
      if (cl.SwitchVisible) 
       cl.SwitchVisible = false; 
      else 
       cl.SwitchVisible = true; 
    } 
} 

public class myClass 
{ 
    private string _aValue; 
    private bool _switchVisible; 

    public bool SwitchVisible { get { return _switchVisible; } set { _switchVisible = value; visControl.changeVisibility(_switchVisible); } } 
    public string aValue { get { return _aValue; } } 
    public controlProperties visControl; 


    public myClass(string invalue) 
    { 
     visControl = new controlProperties(); 
     visControl.VisibleState = Visibility.Visible; 
     _aValue = invalue; 
    } 

} 

public class controlProperties 
{ 
    private Visibility _visibility; 


    public Visibility VisibleState { get { return _visibility; } set { _visibility = value; } } 

    public void changeVisibility(bool isVisible) 
    { 
     if (isVisible) 
      _visibility = Visibility.Visible; 
     else 
      _visibility = Visibility.Collapsed; 
    } 
} 

任何想法,如果這是一個路徑問題的或一個綁定問題?

回答

1

如果您希望控件在更改屬性值時自動更新,您的類必須實現INotifyPropertyChanged接口。

例如:

public class controlProperties : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    private Visibility _visibility; 

    public Visibility VisibleState 
    { 
     get 
     { 
      return _visibility; 
     } 

     set 
     { 
      _visibility = value; 
      this.NotifyPropertyChanged("VisibleState"); 
     } 
    } 

    public void changeVisibility(bool isVisible) 
    { 
     if (isVisible) 
      this.VisibleState = Visibility.Visible; 
     else 
      this.VisibleState = Visibility.Collapsed; 
    } 

    private void NotifyPropertyChanged(string propertyName) 
    { 
     var eventHandler = this.PropertyChanged; 

     if (eventHandler != null) 
     { 
      eventHandler(sender, new PropertyChangedEventArgs(propertyName)); 
     } 
    } 
} 
+0

感謝,這是非常有幫助 – Phil