保存按钮命中时DatePicker更新值,即使没有变化?

时间:2014-09-08 20:32:36

标签: c# windows-phone windows-store-apps winrt-xaml windows-phone-8.1

我有一个DatePicker通过双向绑定绑定到支持变量。变量从null开始。我不想在设置它的值之前显示日期,所以我将它设置为Opacity=0,顶部有一个按钮,触发点击它的DatePicker。

我遇到的问题是,如果有人点击按钮,然后接受当前日期,则不会更新绑定。如果可能的话,我希望它能够更新绑定,无论值是否已经改变。

我尝试将绑定更改为UpdateSourceTrigger=PropertyChanged,但没有效果。

我能看到这样做的唯一方法是手动解析可视树,检索按钮打开的Flyout,然后挂钩到Closed事件。这样做的问题是,如果按下“取消”按钮而不是“接受”按钮,我将遇到问题。

有谁知道这样做的方法?我将尝试按照我建议的方式修复它,直到有人暗示,因为这是我现在能够看到的唯一方式。如果有效,我会更新。

编辑:一些代码示例

我当前的声明(减去一些格式)是这样的:

<local:DatePickerCustom Date="{Binding Value, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"
                        Opacity="{Binding IsEmpty, Converter={StaticResource BooleanNegationToOpacityConverter}}"
                        x:Name="DatePicker"/>

<Button Content="Select Date"
        Command="{Binding ElementName=DatePicker, Path=ClickTemplateButtonCommand}"
        Visibility="{Binding IsEmpty, Converter={StaticResource BooleanToVisibilityConverter}}"/>

所以它的工作方式是,如果Value当前为空,则只显示Button。如果它不为空,则完整的DatePicker显示。

ClickTemplateButtonCommand已在我的DatePickerCustom类中实现,该类直接继承自DatePicker但添加:

public void ClickTemplateButton()
{
    Button btn = (GetTemplateChild("FlyoutButton") as Button);            
    ButtonAutomationPeer peer = new ButtonAutomationPeer(btn);
    IInvokeProvider provider = (peer.GetPattern(PatternInterface.Invoke) as IInvokeProvider);

     provider.Invoke();
}

public RelayCommand ClickTemplateButtonCommand
{
    get
    {
        return new RelayCommand(ClickTemplateButton);
    }
}

所以我希望能够听到Flyout已关闭的事件,并告诉我们是否按下了“接受”按钮。

编辑2:

似乎DatePicker使用的弹出窗口无法以我期望的方式访问。这种方式可能无法实现。

0 个答案:

没有答案