Hi,
I have a customFactory like in example. My customPropertyDataAccessor class overrides OnValueChanged() to set visibility during runtime(like in Selective Visibility example). Here is customPropertyDataAccessor class:
private bool _isVisible;
private void UpdateIsVisible()
{
var propertyVisibility = Target as IPropertyVisibility;
IsVisible = propertyVisibility == null || propertyVisibility.GetPropertyVisibility(ValueName);
}
public bool IsVisible
{
get { return _isVisible; }
private set
{
if (_isVisible == value) return;
_isVisible = value;
OnPropertyChanged("IsVisible");
}
}
public override void OnValueChanged()
{
base.OnValueChanged();
UpdateIsVisible();
}
And here are two properties in my viewModel:
public bool Offline
{
get { return UserControl1 != null && UserControl1.Offline; }
set
{
if (UserControl1 == null) return;
UserControl1.Offline = value;
RaisePropertyChanged();
// Force visibility to be updated
RaisePropertyChanged("OfflineId");
}
}
public int OfflineId
{
get { return UserControl1 != null ? UserControl1.OfflineId : 0; }
set
{
if (UserControl1 == null) return;
UserControl1.OfflineId = value;
RaisePropertyChanged();
}
}
I am using BuiltinEditors.CheckBoxValueTemplateKey in my customFactory for the property Offline and BuiltinEditors.DynamicStringValueTemplateKey for the property OfflineId.
Style for visibility:
<Style TargetType="{x:Type propgrid:PropertyGridDataAccessorItem}">
<Style.Triggers>
<Trigger Property="DataAccessorType" Value="Property">
<Setter Property="Visibility" Value="{Binding RelativeSource={RelativeSource Self}, Path=DataContext.IsVisible, Converter={StaticResource BooleanToVisibilityConverter}}" />
</Trigger>
</Style.Triggers>
</Style>
My goal is to make OfflineId visible only when Offline is true. But when I change Offline's state, overriden OnValueChanged() fires only for the property Offline, and not fires for the OfflineId.
Any ideas what I have done wrong?