2013-07-01 79 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)); 
    }