これを読むのに我慢してください...簡単に言えば、「DataGrid行をクリックすると、それらの値を別のフォーム(ここではuserControl)で表示する必要があります..」
私は 1 つの Wpf リボン ウィンドウを使用しています。そして、そのウィンドウは 2 行に分かれています。最初の行では Wpf リボンを入力し、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 のままです...なぜ解決策を教えてください...
ご辛抱いただきありがとうございます...これを読んでください...