0

データ テンプレートのバインド エラーのトラブルシューティングに問題があります。監視可能なコレクションを作成し、各ファイル名に対して mySelectFlag を True に設定します。Datagrid が表示されると、ヘッダーのチェックボックスがオンになり、データグリッドの各行のチェックボックスがオンになります。行のチェックボックスを選択または選択解除すると、監視可能なコレクションに変更が表示されます。ヘッダーのチェックボックスをオフにすると、監視可能なコレクションの各レコードを false に設定します。監視可能なコレクションで OnPropertyChanged を呼び出しましたが、データグリッドに変更が反映されません。バインディングエラーはありません。誰が私が間違っているのか教えてもらえますか? どうもありがとうございました。

私はクラスを持っています:

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>
4

2 に答える 2

3

UIに変更を表示するにINotifyPropertyChangedは、クラスにインターフェイスを実装する必要があります-InputFileName

private bool mySelectFlag;
public bool MySelectFlag
{
   get
   {
      return mySelectFlag;
   }
   set
   {
      mySelectFlag = value;
      OnPropertyChanged("MySelectFlag");
   }
}
于 2013-07-01T19:34:08.200 に答える
1

INotifyPropertyChanged インターフェイスをクラスで実装するには、メソッドを以下のように定義し、すべてのプロパティで OnPropertyChangeEvent を呼び出す必要があります。

パブリック イベント PropertyChangedEventHandler PropertyChanged;

    public void OnPropertyChanged(string e)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(e));
    }
于 2013-07-02T11:59:54.353 に答える