0

如何从另一个地方调用这个方法?

private void AssortDatagrid_LoadRows(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
{

    if (ValidTill.SelectedIndex >= 0)
    {
        DataRowView rowContext = e.Row.DataContext as DataRowView;

        string item = rowContext.Row["Срок годности"].ToString();
        DateTime date;
        if ((DateTime.TryParseExact(item, "dd'.'MM'.'yyyy",
                                   CultureInfo.InvariantCulture,
                                   DateTimeStyles.None,
                                   out date)) && (rowContext != null))
        {
            if (date.Date <= dt.Date)
            {
                try
                {

                    e.Row.Background = new BrushConverter().ConvertFromString(rowColor) as SolidColorBrush;

                }
                catch (Exception ex)
                {
                    MessageBox.Show(ex.Message);
                    return;
                }
            }
        }
        else // когда не может парсировать дату
        {

        }

    }


}

我想在这里称呼它:

private void workForce_DoWork(object sender, DoWorkEventArgs e)
{
   AssortDatagrid_LoadRows(object sender, Microsoft.Windows.Controls.DataGridRowEventArgs e)
}

可以调用吗?让我解释一下我在做什么。我想在加载行时调用弹出窗口,在弹出窗口中我有圆形进度条作为 gif 动画。我正在更改有效日期很快的那些项目的行背景。

4

2 回答 2

3

对使它们不可调用的事件处理程序没有任何限制。它们具有与任何其他方法组相同的可访问性修饰符和调用规则。因此,您可以像任何其他方法一样调用处理程序,可选择传递具有非空值的参数:

AssortDatagrid_LoadRows(null, null);

更新
收到您的评论后:

“调用线程无法访问此对象,因为不同的线程拥有它。”

这似乎是一个调用问题......实际上看起来是一个 WPF 调用。

请参见Dispatcher.Invoke

在这种情况下,类似...

this.Dispatcher.Invoke(new Action(()=>AssortDatagrid_LoadRows(null, null))

虽然这应该解决错误...Servy 提出了一个很好的观点。这种类型的工作因此可以从 UI 线程中卸载。将其推到BackGroundWorker。我离题了...我们将与原始问题相切。

于 2013-02-12T19:14:09.140 回答
0

您可以像任何其他方法一样调用事件处理程序,但更好的方法是重构代码并将事件处理程序的内容提取为普通方法(带有所需参数)。然后在两个地方(事件处理程序和您要调用事件处理程序的第二个地方)调用该方法。

于 2013-02-12T19:24:18.217 回答