- Beginners Guide To WPF
- A Guided Tour Of WPF
- Tips on how to debug and learn about WPF "I have found ‘WPF Unleashed’ and ‘Applications = Code + Markup’ to be great." Someones recommmendation .
- Introduction to WPF
- Simple convert VB windows form designer to XAML
- WPF NotifyIcon
- WPF library
- Useful WPF site
- WPF FileExplorer Controls
- Add context menu items to Windows Explorer
- Another Add context menu item to Windows Explorer article
- Menus in XAML and WPF
- Useful WPF controls
- WPF Panels. As an aside does photo browsing in WPF
March 6, 2008
WPF Links
AsReadyOnly method
The AsReadyOnly method. This method is exposed by the List,
Set, Array<>, and others and generates what is basically an adapter to your
collection. The return value is a System.Collections.ObjectModel.ReadOnlyCollection that is the best of both worlds , it shows live data from the internal collection and it doesn't let the consumer modify the collection contents.
Here's an example of the implementation
public class MyManagerClass { private List_objects = new List (); public ReadOnlyCollection Objects { get { return _objects.AsReadOnly(); } } }
Setting up Log4Net in the application config file.
Setting up log4net to use a rolling file appender and a trace appender
<?xml version="1.0" encoding="utf-8" ?> <configuration> <configSections> <section name="log4net" type="log4net.Config.Log4NetConfigurationSectionHandler, log4net" /> </configSections> <log4net debug="false"> <appender name="RollingFileAppender" type="log4net.Appender.RollingFileAppender"> <file value="${ENVIROMENTALVARIABLENAME}\\MyApplicationName.exe.txt" /> <appendToFile value="true" /> <maximumFileSize value="100KB" /> <maxSizeRollBackups value="5" /> <param name="RollingStyle" value="Size" /> <layout type="log4net.Layout.PatternLayout"> <param name="ConversionPattern" value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <appender name="TraceAppender" type="log4net.Appender.TraceAppender"> <layout type="log4net.Layout.PatternLayout"> <conversionPattern value="%d [%t] %-5p %c [%x] - %m%n" /> </layout> </appender> <root> <priority value="ALL" /> <appender-ref ref="RollingFileAppender" /> <appender-ref ref="TraceAppender" /> </root> </log4net> </configuration>
Reading The Number Of Rows In A Table Search
const string NUM_XXX = "SELECT COUNT(*) AS numXXXs" "FROM ... "WHERE ... using (databaseConnection = new SqlConnection(XXXConnectionString)) { databaseConnection.Open(); using (SqlCommand command = new SqlCommand()) { command.Connection = databaseConnection; command.CommandText = NUM_XXX; command.Parameters.AddWithValue("@Id", id); SqlDataReader reader = command.ExecuteReader(); if (reader != null) { if (reader.HasRows && reader.Read()) { numXXXs = reader.GetInt32(0); } reader.Close(); } } }
Simple Background Worker Object Template
BackgroundWorker backgroundWorker Worker worker; private void AsyncStartWork() { if (!backgroundWorker.IsBusy) { worker = new Worker(...); backgroundWorker.DoWork += new DoWorkEventHandler(backgroundWorker_DoWork); backgroundWorker.RunWorkerCompleted += new RunWorkerCompletedEventHandler(backgroundWorker_RunWorkerCompleted); backgroundWorker.RunWorkerAsync((object)worker); } } private void backgroundWorker_DoWork(object sender, DoWorkEventArgs e) { Worker worker = e.Argument as Worker; if (worker != null) { worker.DoSomething(); } } private void backgroundWorker_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e) { backgroundWorker.DoWork -= new DoWorkEventHandler(backgroundWorker_DoWork); backgroundWorker.RunWorkerCompleted -= new RunWorkerCompletedEventHandler( backgroundWorker_RunWorkerCompleted); // Update GUI // IF necessary do something with results Show(worker.Results); }
Subscribe to:
Posts (Atom)