2014-09-22 51 views
0

我有這個代碼,我有一個帶有複選框的可觀察集合(類型Herarhy模型)的代碼。 在某些事件中,我將複選框設置爲禁用。WPF沒有響應可觀察集合中的複選框c#

問題: - 當我用debbuger運行代碼時,我發現它確實已更改爲禁用,但在界面上看不到更改。

  • 我認爲這是一些可觀察的集合。 也當我從可觀察集合中刪除該項目並將其重新放回時它會更新。

    <ListView.View> 
        <GridView AllowsColumnReorder="False"> 
         <GridViewColumn Width="50" Header=" "> 
          <GridViewColumn.CellTemplate> 
           <DataTemplate> 
            <CheckBox IsChecked="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsBulkUpdatedChecked}" IsEnabled="{Binding RelativeSource={RelativeSource AncestorType={x:Type ListViewItem}}, Path=IsBulkUpdatedEnabled}"/> 
           </DataTemplate> 
          </GridViewColumn.CellTemplate> 
         </GridViewColumn> 
        <GridViewColumn Width="175" Header="Project Name" DisplayMemberBinding="{Binding Name}"/> 
        <GridViewColumn Width="120" Header="Code" DisplayMemberBinding="{Binding Code}"/> 
        <GridViewColumn Width="120" Header="Step" DisplayMemberBinding="{Binding SelectedStep}"/> 
        <GridViewColumn Width="150" Header="Version Name" DisplayMemberBinding="{Binding ActiveVersion}"/> 
    </GridView> 
    

    private ObservableCollection<HierarchyModel> _ProjectsFamily = new ObservableCollection<HierarchyModel>(); 
         public ObservableCollection<HierarchyModel> ProjectsFamily 
         { 
          get 
          { 
           return _ProjectsFamily; 
          } 
          set 
          { 
           _ProjectsFamily = value; 
           RaisePropertyChanged("ProjectsFamily"); 
          } 
    
         } 
    
    
    
    
         public bool IsBulkUpdatedChecked 
         { 
          get 
          { 
           return Hierarchy.IsBulkUpdatedChecked; 
          } 
          set 
          { 
           Hierarchy.IsBulkUpdatedChecked = value; 
           RaisePropertyChanged("IsBulkUpdatedChecked"); 
          } 
         } 
    
    
         public bool IsBulkUpdatedEnabled 
         { 
          get 
          { 
           return Hierarchy.IsBulkUpdatedEnabled; 
          } 
          set 
          { 
           Hierarchy.IsBulkUpdatedEnabled = value; 
           RaisePropertyChanged("IsBulkUpdatedEnabled"); 
          } 
         } 
    
+0

是什麼層次?你在屬性的getter/setter中使用它。另外,嘗試將BindingMode設置爲CheckBoxe的IsChecked爲TwoWay – 2014-09-22 14:57:18

+0

我認爲這是可觀察集合中的某些事情。當我從可觀察集合中刪除該項目並將其重新放回時,它也會更新。 – igor 2014-09-22 15:03:29

回答

0

你應該在Visual Studio中的輸出窗口,告訴你是這樣的一個錯誤:

System.Windows.Data Error: 40 : BindingExpression path error: 'IsBulkUpdatedChecked' property not found on 'object' ''ListViewItem' (Name='This')'. BindingExpression:Path=IsBulkUpdatedChecked; DataItem='ListViewItem' (Name='This'); target element is 'CheckBox' (Name=''); target property is 'IsChecked' (type 'Object')...

這是因爲ListViewItem類沒有IsBulkUpdatedChecked屬性。而不是使用那個Binding Path,你應該使用一個指向你的位置實際上定義該屬性。我不能告訴你那是因爲你沒有打擾我們。我只能猜測,它是設置爲Window.DataContext屬性值的對象......在這種情況下,試試這個:

<CheckBox IsChecked="{Binding DataContext.IsBulkUpdatedChecked, 
    RelativeSource={RelativeSource AncestorType={x:Type Window}}}" IsEnabled="{Binding 
    DataContext.IsBulkUpdatedChecked, RelativeSource={RelativeSource 
    AncestorType={x:Type Window}}}"/>