2014-09-22 47 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}}}"/>