2016-09-12 101 views
0

我有一个ListView其中每个项目是CheckBox其次是Name属性。绑定CheckBox IsChecked值属性

<ListView Name="ShapesList" 
      SelectionChanged="ShapesList_OnSelectionChanged" 
      Grid.Row="2" Grid.Column="0" 
      ItemsSource="{Binding ChartViewModel.OidList}" 
      Margin="15,0,10,10" 
      SelectionMode="Multiple"> 
    <ListView.View> 
     <GridView> 
      <GridView.Columns> 
       <GridViewColumn> 
        <GridViewColumn.CellTemplate> 
         <DataTemplate> 
          <CheckBox Style="{DynamicResource BigCheckbox}" 
             IsChecked="{Binding Path=IsSelected3, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Mode=TwoWay}" 
             Content="{Binding Path=Name, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}}" 
             Checked="RoiChecked" Unchecked="RoiUnchecked"/> 
         </DataTemplate> 
        </GridViewColumn.CellTemplate> 
       </GridViewColumn> 
       <GridViewColumn Header="ROI" DisplayMemberBinding="{Binding Name}" /> 
      </GridView.Columns> 
     </GridView> 
    </ListView.View> 

哪里IsSelected3是继承INotifyPropertyChanged一类的属性。

public bool IsSelected3 
{ 
    get { return _isSelected3; } 
    set 
    { 
     _isSelected3 = value; 
     FirePropertyChanged("IsSelected3"); 
    } 
    } 

问题是IsChecked绑定不起作用,而是使用Name的那个。

你有什么想法吗? 谢谢!

+0

它属于哪一类?如果它是ChartViewModel.OldList中包含的东西的属性,只需使用'IsChecked =“{Binding IsSelected3}”'。你的名字绑定工作吗? –

回答

0

多亏了凯尔给出的想法,我找到了解决办法:

IsChecked="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}}, Path=DataContext.IsChecked, Mode=TwoWay}" 

如果x:TypeListViewItem它的工作原理。

感谢您的帮助!

0

两个变化:

Path=DataContext.IsSelected3 
x:Type ListView 

器isChecked现在约束力的样子:

IsChecked="{Binding Path=DataContext.IsSelected3, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListView}}, Mode=TwoWay}" 
+0

谢谢凯尔,但不幸的是它仍然无法正常工作。 –

相关问题