簡體   English   中英

在WPF中從RadGridView內部的RadDatePicker兩次調用LostFocus事件

[英]Double Invokation of LostFocus event from RadDatePicker inside a RadGridView in WPF

我的UserControl中有一個telerik:RadGridView ,它具有多個列,並且具有RadDatePicker作為,

 <telerik:RadGridView Grid.Row="1" 
                Grid.Column="0"
                AutoGenerateColumns="False" 
                AutoExpandGroups="True" 
                IsReadOnly="False"
                ColumnWidth="*" 
                ItemsSource="{Binding DataModel.FlightDetailsList, Mode=TwoWay}" 
                IsFilteringAllowed="False" 
                IsSynchronizedWithCurrentItem="False" 
                SelectionMode="Single" 
                ShowGroupPanel="False">
            <telerik:RadGridView.Columns>


                <telerik:GridViewDataColumn Header="Date of Travel *" DataMemberBinding="{Binding FlightDate}">
                    <telerik:GridViewColumn.CellTemplate>
                        <DataTemplate>
                            <TextBlock Text="{Binding Path=FlightDate, Mode=OneWay, StringFormat=dd-MMM-yyyy}" />
                        </DataTemplate>
                    </telerik:GridViewColumn.CellTemplate>
                    <telerik:GridViewColumn.CellEditTemplate>
                        <DataTemplate>
                            <telerik:RadDatePicker SelectedDate="{Binding Path=FlightDate, Mode=TwoWay, StringFormat=dd-MMM-yyyy, UpdateSourceTrigger=LostFocus}" DisplayFormat="Short" Culture="en-AU" />
                        </DataTemplate>
                    </telerik:GridViewColumn.CellEditTemplate>
                </telerik:GridViewDataColumn>
            </telerik:RadGridView.Columns>
        </telerik:RadGridView>

在這里,如果您看到我的集合FlightDetailsList是綁定到網格的數據。 telerik:RadDatePicker綁定到FlightDate屬性。

我想調用FlightDate屬性更改的屬性,因此在我已訂閱的viewmodel中,

 private void FlightDetailsListCollectionChanged(object sender, System.Collections.Specialized.NotifyCollectionChangedEventArgs e)
    {
        if (e.Action == System.Collections.Specialized.NotifyCollectionChangedAction.Add)
        {
            var _obj = (e.NewItems[0] as FlightDtls);
            if (_obj != null)
                (e.NewItems[0] as FlightDtls).PropertyChanged += new PropertyChangedEventHandler(FlightDtlsPropertyChanged);
        }

    }

    private void FlightDtlsPropertyChanged(object sender, PropertyChangedEventArgs e)
    {
        var data = sender as FlightDtls;
        if (data != null && string.Equals(e.PropertyName, "FlightDate", StringComparison.InvariantCultureIgnoreCase) && IsValidateFltDt && (DateTime.Now.Date - data.FlightDate.Value.Date).TotalDays > 2)
        {
            CommonMethods.ShowAlertMessage("The Date of Travel in Flight Routing must be no less than 2 days!", MessageBoxImage.Exclamation);
        }
    }

我面臨的問題是,每當我過去使用datepicker更改日期時,propertychanged事件都會觸發兩次。 反之,如果我通過鍵盤編輯日期,則偶數會按預期觸發一次。 從datepicker中選擇時,如何避免兩次調用。

將列的類型更改為GridViewColumn

<telerik:GridViewColumn Header="Date of Travel *">
    <telerik:GridViewColumn.CellTemplate>
        <DataTemplate>
            <TextBlock Text="{Binding Path=FlightDate, Mode=OneWay, StringFormat=dd-MMM-yyyy}" />
        </DataTemplate>
    </telerik:GridViewColumn.CellTemplate>
    <telerik:GridViewColumn.CellEditTemplate>
        <DataTemplate>
            <telerik:RadDatePicker SelectedDate="{Binding Path=FlightDate, Mode=TwoWay, StringFormat=dd-MMM-yyyy, UpdateSourceTrigger=LostFocus}" DisplayFormat="Short" Culture="en-AU" />
        </DataTemplate>
    </telerik:GridViewColumn.CellEditTemplate>
</telerik:GridViewColumn>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM