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

イベントハンドラーを呼び出し不能にする制限はありません。これらには、他のメソッドグループと同じアクセシビリティ修飾子と呼び出しルールがあります。したがって、他のメソッドと同じようにハンドラーを呼び出し、オプションでnull以外の値の引数を渡すことができます。

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

他のメソッドと同じようにイベントハンドラーを呼び出すことができますが、より良いアプローチは、コードをリファクタリングし、イベントハンドラーのコンテンツを通常のメソッド(必要なパラメーターを使用)として抽出することです。次に、両方の場所(イベントハンドラーと、イベントハンドラーを呼び出したい2番目の場所)でメソッドを呼び出します。

于 2013-02-12T19:24:18.217 に答える