0

これを読むのに我慢してください...簡単に言えば、「DataGrid行をクリックすると、それらの値を別のフォーム(ここではuserControl)で表示する必要があります..」

私は 1 つの Wpf リボン ウィンドウを使用しています。そして、そのウィンドウは 2 行に分かれています。最初の行では Wpf リボンを入力し、2 番目の行ではアクションに基づいてユーザー コントロールを入力するために 1 つのドック パネルを入力しました。

リボンには2つのボタンがあります

  1. 全従業員を表示
  2. 従業員を追加するには

2 つのユーザー コントロール フォームを作成しました。

ここで、最初にリボン Button1 をクリックしてすべての従業員の詳細を表示し、次に userControl "CtlGridDisplay" を DockPanel (リボン ウィンドウにある) にロードし、すべての詳細を DataGrid に表示します。

今、私は行をダブルクリックして、選択した行のemployeeIdを取りますそして、その詳細を別のユーザーコントロール「CtlAddEmployee」に表示したいと思いますそして、このuserControlはそのDockPanelにのみ表示する必要があります..そのために、Dockpanelをクリアしようとして、コントロール「CtlAddEmployee」のオブジェクトを作成し、そのコントロールを DockPanel に追加しました。しかし、DockPanel は DataGRid のみで塗りつぶされたままです。つまり、「CtlGridDisplay」で塗りつぶされたままです...理由がわかりません...

これを行うために、イベントとデリゲートも使用しました。すべてのコードを適切に実行しますが、ドックパネルはクリアされず、新しいコントロールがロードされませんでした..

しかし、1 つのリボン ボタン 1 をクリックすると、「CtlGridDisplay」が読み込まれ、リボン ボタン 2 をクリックすると、Dock パネルに「CtlAddEmployee」が読み込まれます...

しかし、データを表示しようとすると、1つのuserControlでDataGridをクリックして別のコントロールに表示しようとすると機能しません..

イベント デリゲートのアプローチ コードは以下のようなものです...

ユーザーコントロール「CtlDisplayEmployeeList」では、コードは

public event MyOrganizationDetails.MainRibbonWinodw.DisplayEmployeeHandler DisplayemployeeEvent;

private void GridList_MouseDoubleClick(object sender, MouseButtonEventArgs e)
{
    MainRibbonWinodw mainRibbonobj = new MainRibbonWinodw();
    this.DisplayemployeeEvent += new MainRibbonWinodw.DisplayEmployeeHandler(mainRibbonobj.fnDisplayEmployeeDetails);
    if (GridList.SelectionUnit == DataGridSelectionUnit.FullRow)
    {
        if (GridList.SelectedItems.Count > 0)
        {
            for (int i = 0; i < GridList.SelectedItems.Count; i++)
            {
                DataGrid dg = sender as DataGrid;
                EmployeeDetail detail = dg.SelectedItem as EmployeeDetail;
                string selectedEmp = detail.EmpId; //it gives Employee Id

                if (DisplayemployeeEvent != null)
                    DisplayemployeeEvent(selectedEmp);
            } 
        }
    }
}

リボン ウィンドウでは、コードは次のようになります...ここでイベントを処理します...

public partial class MainRibbonWinodw : RibbonWindow
{
    public delegate void DisplayEmployeeHandler(string str);

    public void fnDisplayEmployeeDetails(string str)
    {
        CtlAddEmployee frm2 = new CtlAddEmployee(str);
        DockPanelInRibbon.Children.Clear();
        DockPanelInRibbon.Children.Add(frm2);    
    }
}

別のユーザー コントロールで..

コンストラクタ...

public CtlAddEmployee(string str)
{
    InitializeComponent();
    fnDisplayingEmployee(str);
}

すべてのコードをデバッグすると、正常に起動されますが、「CtlAddEmployee」フォームが DockPanel に読み込まれません... Dock パネルはその DataGRid のままです...なぜ解決策を教えてください...

ご辛抱いただきありがとうございます...これを読んでください...

4

1 に答える 1

0

Dockpanel のイベントも呼び出す必要があります。たとえば、 leftMouseButtonUp とそこにユーザーコントロールをドッキングします。

于 2012-08-25T19:12:36.523 に答える