PropertyChangedEventHandler имеет значение null, даже если свойство является изменением - PullRequest
1 голос
/ 30 апреля 2019

У меня есть сетка данных и один главный флажок.Когда я проверяю изменения в главном флажке, это повлияет на все флажки, которые находятся внутри сетки данных;Я просто делаю это программно.

data grid

Мой так называемый ViewModel:

foreach (TimeSheetModel value in TimeSheetList.Intersect(selectedlist))
{

    if (!chkmain.IsChecked.GetValueOrDefault())
    {
        value.IsApproved = false;

    }
    else                   
    {
        value.IsApproved = true;                                
    }
}

Это мой TimeSheetModel:

public class TimeSheetModel:BaseModel, ICloneable
{
    bool _IsApproved;
    public bool IsApproved
    {
        get
        {
            return _IsApproved;
        }
        set
        {               

            if (_IsApproved != value)
            {
                _IsApproved = value;                           
                RaisePropertyChange("IsApproved");                   
            }
        }
    }
}

Это мой BaseModel:

public class BaseModel : INotifyPropertyChanged
{            
    public event PropertyChangedEventHandler PropertyChanged;
    public void RaisePropertyChange(string prop)
    {
        try
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(prop));
                IsUpdated=true
            }

        }
        catch (Exception ex)
        {
            throw ex;
        }            
    }
}

Это мой xaml:

<DataGridTemplateColumn Visibility="{Binding IsShowApprove,Source={x:Static c:TMSHelper.Current}}">
    <DataGridTemplateColumn.HeaderTemplate>
        <DataTemplate>
            <StackPanel Orientation="Vertical"
                        HorizontalAlignment="Right"
                        Margin="-8">
                <TextBlock  Text="Approve"
                            Height="20"
                            Margin="5,3,0,0" />
                <CheckBox Margin="27,0,0,0"
                          x:Name="chkMainApproved"                        
                          Checked="chkApproved_Checked"
                          Unchecked="chkApproved_Checked">
                </CheckBox>
            </StackPanel>
        </DataTemplate>
    </DataGridTemplateColumn.HeaderTemplate>
    <DataGridTemplateColumn.CellTemplate>
        <DataTemplate>
            <CheckBox BorderThickness="1"
                      Margin="27,0,0,0"
                      Background="{Binding RelativeSource={RelativeSource AncestorType={x:Type DataGridRow}},Path=Background}"
                      IsChecked="{Binding IsApproved,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}"
                      KeyDown="DatePicker_KeyDown"
                      >
                <CheckBox.Style>
                    <Style TargetType="CheckBox" BasedOn="{StaticResource MetroCheckBox}">
                        <Setter Property="IsEnabled"
                                Value="True" />
                        <Style.Triggers>
                            <DataTrigger Binding="{Binding IsLock}" Value="True">
                                <Setter Property="IsEnabled" Value="False"/>
                            </DataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsLock}"
                                               Value="True" />                                                      
                                </MultiDataTrigger.Conditions>
                                <Setter Property="IsEnabled"
                                        Value="False" />
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsNew}"
                                               Value="True" />
                                    <Condition Binding="{Binding CanAdd}"
                                               Value="False" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="IsEnabled"
                                        Value="False" />
                            </MultiDataTrigger>
                            <MultiDataTrigger>
                                <MultiDataTrigger.Conditions>
                                    <Condition Binding="{Binding IsNew}"
                                               Value="False" />
                                    <Condition Binding="{Binding CanEdit}"
                                               Value="False" />
                                </MultiDataTrigger.Conditions>
                                <Setter Property="IsEnabled"
                                        Value="False" />
                            </MultiDataTrigger>
                        </Style.Triggers>
                    </Style>
                </CheckBox.Style>
            </CheckBox>
        </DataTemplate>
    </DataGridTemplateColumn.CellTemplate>
</DataGridTemplateColumn>

Согласно моему пониманию, если я изменюсьvalue.IsApproved=true (внутри ViewModel) это вызовет свойство IsApproved внутри TimeSheetModel и перейдет к методу RaisePropertyChanged и перейдет к PropertyChanged и IsUpdated свойство будет истинным.

Моя проблемаМой propertyChanged иногда равен нулю, иногда имеет значение.Даже если значение IsApproved было изменено.

Это происходит не во всех флажках.

Надеюсь, вы поймете мой вопрос, и, пожалуйста, дайте мне знать, что я могу предоставить.

...