[ Log In ]
Skip Navigation Links

Showing a New Window or Dialog

This is actually called instantiating since this is the creation of an instance.

What is being done here is a new window is added to the project, and somewhere in your code, you would create and instance of the window. In this example, I will instantiate the new window from a button click.

Step 1:
Add a new window to the project. Don't forget to name the window something that well explains the function of that window.

Step 2:
Determine where in the code you would like to invoke the window. If this is a simple button click, just double click the button in the xaml screen.

Step 3:
Add the code:

private void Button_click(object sender, RoutedEventArgs e)
{
WindowName WindowNameInstance = new WindowName();
WindowNameInstance.ShowDialog();
}

The WindowName is the same name that was determined when the WPF window was added to the project.

If an object, or information needs to be passed into the window instance, say, to populate fields with data that was selected from a datagrid, the following code would be one way:

Instantiating a new window after selecting a row of a DataGrid:

For an Update button:

private void btnUpdate_Click(object sender, RoutedEventArgs e)
{
if (DataGridName.SelectedItem != null)
{
LINQTable DataGricSelectedInformation = DataGridName.SelectedItem as LINQTable;
WindowName WindowNameInstance = new WindowName(DataGricSelectedInformation, UniqueID);
WindowNameInstance.ShowDialog();
buildListForDataGrid(); // Call to the method that re-builds the list for the DataGrid upon return
}
}

For an Add Button:

private void btnAddNew_Click(object sender, RoutedEventArgs e)
{
PersonalEntryScreen AddPersonalDialog = new PersonalEntryScreen(null, UniqueID);
AddPersonalDialog.ShowDialog();
buildListOfPersonal(); // Call to the method that re-builds the list for the DataGrid upon return
}

Since I like to combine the functions to add a new record, and update or modify an existing record of a database in one window, I use two values, one as an object for the data, and the unique ID number associated with the record. A special variable will be created in the destination window to determine if the information should be updated or added since this decision will be from a specific button click (add button, or update button) from the initial window.

The initialization (constructor) part of the destination window should be modified so that it uses the update variable and is able to pass in the table object and the ID number for the appropraite record. Also included is an initializer for a date picker to select current date.

public WindowName(LINQTable TableRecordToBePassedIn, int UniqueIDPassedIn)
{
InitializeComponent();

if (TableRecordToBePassedIn != null)
{
PopulateScreenFields(TableRecordToBePassedIn);
Update = true;
}
else
{
Update = false;
UniqueIDNumber = UniqueIDPassedIn;
DatePickerName.SelectedDate = DateTime.Today;
}
}