2013-07-01 50 views
0

我有一个问题,麻烦一个DataTemplate拍摄绑定错误。我创建一个可观察的集合,并为每个文件名设置mySelectFlag True。显示Datagrid时,将检查标题上的复选框,并且数据网格中的每一行都会选中其复选框。如果我选择/取消选中一行复选框,则更改显示在可观察集合上。如果我取消选中标题复选框,则将可观察集合上的每条记录设置为false。我在可观察集合上调用了OnPropertyChanged,但数据网格没有反映出这种变化。没有绑定错误。谁能告诉我我做错了什么? 非常感谢。DataTemplate中绑定错误

我有一个类:

public class InputFileName 
     { 
      public bool mySelectFlag { get; set; } 
      public string myFileName { get; set; } 
     } 

和的ObservableCollection:

private ObservableCollection<InputFileName> _DisplayList; 
public ObservableCollection<InputFileName> DisplayList 
{ 
    get { return _DisplayList; } 
    set 
    { 
     if (value != _DisplayList) 
     { 
      _DisplayList = value; 
      OnPropertyChanged("DisplayList"); 
     } 
    } 
} 

,这是我的XAML:

<DataGrid 
    Margin="25" 
    RowHeaderWidth="0" 
    AutoGenerateColumns="False" 
    AlternatingRowBackground="Gainsboro" 
    AlternationCount="2" 
    Block.TextAlignment="Center" 
    CanUserAddRows="False" 
    CanUserReorderColumns="False" 
    CanUserResizeColumns="False" 
    CanUserSortColumns="False" 
    ItemsSource="{Binding Path=DisplayList}" > 
    <DataGrid.Columns> 
      <DataGridTemplateColumn> 
       <DataGridTemplateColumn.HeaderStyle> 
        <Style TargetType="DataGridColumnHeader"> 
         <Setter Property="ContentTemplate"> 
           <Setter.Value> 
            <DataTemplate> 
             <CheckBox 
              IsChecked="{Binding    Path=DataContext.IsSelected, ElementName=myControl1, FallbackValue=False}" 
                 Command="{Binding Path=DataContext.SelectAllRows, ElementName=myControl1}" 
                 Content="Select" 
                 FontWeight="Bold" 
                 Width="Auto" /> 
            </DataTemplate> 
            </Setter.Value> 
           </Setter> 
          </Style> 
          </DataGridTemplateColumn.HeaderStyle> 
           <DataGridTemplateColumn.CellTemplate> 
            <DataTemplate> 
             <CheckBox 
              HorizontalAlignment="Center" 
              VerticalAlignment="Center" 
              IsChecked="{Binding Path=mySelectFlag, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged, FallbackValue=False}" 
              Command="{Binding Path=DataContext.TestTaskCommand, ElementName=myControl1}" 
              CommandParameter="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGrid}}, Path=SelectedIndex}" /> 
            </DataTemplate> 
           </DataGridTemplateColumn.CellTemplate> 
          </DataGridTemplateColumn> 
          <DataGridTextColumn 
           Header="File Name" 
           FontWeight="Bold" 
           Width="Auto" 
           Binding="{Binding Path=myFileName}" /> 
         </DataGrid.Columns> 
        </DataGrid> 

回答

2

你需要实现你的InputFileNameINotifyPropertyChanged接口因为我们可以对UI进行更改 -

private bool mySelectFlag; 
public bool MySelectFlag 
{ 
    get 
    { 
     return mySelectFlag; 
    } 
    set 
    { 
     mySelectFlag = value; 
     OnPropertyChanged("MySelectFlag"); 
    } 
} 
+1

这做到了!非常感谢你! –

0

INotifyPropertyChanged的interfaceto通过类来实现,方法应该像下面的一个定义,所有的属性应该调用OnPropertyChangeEvent

公共事件PropertyChangedEventHandler的PropertyChanged;

public void OnPropertyChanged(string e) 
    { 
     if (PropertyChanged != null) 
      PropertyChanged(this, new PropertyChangedEventArgs(e)); 
    }