我有一个包含Telerik RadPaneGroup的WPF表单,其中有许多RadPanes:
<telerik:RadPaneGroup>
<telerik:RadPane
x:Name="ticketMapPane"
Header="Map"
CanUserPin="False"
CanFloat="{Binding preferencesProperties.canFloatPanes}"
IsHidden="{Binding Path=viewModel.stickyProperties.mapPaneVisible, RelativeSource={RelativeSource AncestorType=KtWpf:KorWindow}, Mode=TwoWay, Converter={StaticResource boolInverterConverter}}"
telerik:RadDocking.SerializationTag="ticketMapPane"
>
<local:TicketMap
x:Name="ticketMap"
ticketMapType="{Binding RelativeSource={RelativeSource AncestorType=KtWpf:KorWindow}, Path=viewModel.preferencesProperties.ticketMapType}"
/>
</telerik:RadPane>
</telerik:RadPaneGroup>
ticketMapPane.IsHidden绑定了对stickyProperties.mapPaneVisible的否定,因此如果mapPaneVisible为true,则IsHidden为false,并显示该窗格。
如果mapPaneVisible在启动时为true,则ticketMapPane可见,并且ticketMap.ticketMapType正确绑定到preferencesProperties.ticketMapType,并且一切都与世界完美结合。
如果我然后操作将stickyProperties.mapPaneVisible设置为false的UI控件,则窗格变为不可见,如果我将其设置为true,则窗格再次可见,并且ticketMapType通过它正确绑定。
但是如果启动时stickyProperties.mapPaneVisible为false,则会隐藏ticketMapPane,并且似乎没有绑定ticketMapType。
我在ticketMapType属性上有一个更改处理程序。当ticketMapPane在启动时可见时,它被调用,而当它不是时,它被调用:
public partial class TicketMap : KorUserControl
{
public TicketMapType ticketMapType
{
get { return (TicketMapType)GetValue(ticketMapTypeProperty); }
set { SetValue(ticketMapTypeProperty, value); }
}
public static readonly DependencyProperty ticketMapTypeProperty =
DependencyProperty.Register("ticketMapType", typeof(TicketMapType), typeof(TicketMap),
new PropertyMetadata(new PropertyChangedCallback(ticketMapTypePropertyChanged)));
private static void ticketMapTypePropertyChanged(DependencyObject d, DependencyPropertyChangedEventArgs e)
{
var ticketMap = d as TicketMap;
if (ticketMap != null && e.NewValue is TicketMapType)
{
var ticketMapType = (TicketMapType) e.NewValue;
ticketMap.setTicketMapType(ticketMapType);
}
}
[...]
}
所以发生的事情是,如果窗格在启动时被隐藏,当我将其显示时,TicketMap.ticketMapType包含默认值,而不是它应该绑定的值。如果窗格在启动时可见,则所有内容都会正确绑定。
所以,问题是 - 如何让它发挥作用?
我可以看到两种可能性:
关于如何做的任何想法?