У меня есть сетка данных и один главный флажок.Когда я проверяю изменения в главном флажке, это повлияет на все флажки, которые находятся внутри сетки данных;Я просто делаю это программно.
Мой так называемый 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
было изменено.
Это происходит не во всех флажках.
Надеюсь, вы поймете мой вопрос, и, пожалуйста, дайте мне знать, что я могу предоставить.