不可见时绑定DependencyProperty?

时间:2015-12-28 19:58:26

标签: c# wpf xaml telerik

我有一个包含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包含默认值,而不是它应该绑定的值。如果窗格在启动时可见,则所有内容都会正确绑定。

所以,问题是 - 如何让它发挥作用?

我可以看到两种可能性:

  1. 即使窗格不可见,我也会获得连接绑定,或
  2. 当窗格可见时,我得到了连接的绑定。
  3. 关于如何做的任何想法?

0 个答案:

没有答案