Friday, November 27, 2009

Overview of Implementation of Peer-to-Peer in C#

Peer-to-Peer(P2P) architecture is a serverless architecture. In a peer mesh network, in order for them to be considered and classified as peer, first, the node needs to be included in a peer mesh layer. To do so, their are two options. First by using PNRP(Peer Name Resolution Protocol) and Custom Peer Resolver.

Managed Extensibility Framework(MEF)

MEF is the creation of extensible applications. It offers discovery and composition capabilities that you can leverage to load application extensions (.dll's).
It provides a standard way for the host application to expose itself and consume external extensions; sets of discovery approaches for your application to locate and load available extensions; and tagging extensions with additonal metadata which facilitates querying and filtering.

Monday, November 23, 2009

Eventing in MVVM pattern without using Caliburn Framework

Steps:

1. You need to have an EventBehaviourFactory class. You can copy this code.


public static class EventBehaviourFactory
{
public static DependencyProperty CreateCommandExecutionEventBehaviour(RoutedEvent routedEvent, string propertyName, Type ownerType)
{
DependencyProperty property = DependencyProperty.RegisterAttached(propertyName, typeof(ICommand), ownerType,
new PropertyMetadata(null,
new ExecuteCommandOnRoutedEventBehaviour(routedEvent).PropertyChangedHandler));

return property;
}

///
/// An internal class to handle listening for an event and executing a command,
/// when a Command is assigned to a particular DependencyProperty
///

private class ExecuteCommandOnRoutedEventBehaviour : ExecuteCommandBehaviour
{
private readonly RoutedEvent _routedEvent;

public ExecuteCommandOnRoutedEventBehaviour(RoutedEvent routedEvent)
{
_routedEvent = routedEvent;
}

///
/// Handles attaching or Detaching Event handlers when a Command is assigned or unassigned
///

///
///
///
protected override void AdjustEventHandlers(DependencyObject sender, object oldValue, object newValue)
{
UIElement element = sender as UIElement;
if (element == null) { return; }

if (oldValue != null)
{
element.RemoveHandler(_routedEvent, new RoutedEventHandler(EventHandler));
}

if (newValue != null)
{
element.AddHandler(_routedEvent, new RoutedEventHandler(EventHandler));
}
}

protected void EventHandler(object sender, RoutedEventArgs e)
{
HandleEvent(sender, e);
}
}

internal abstract class ExecuteCommandBehaviour
{
protected DependencyProperty _property;
protected abstract void AdjustEventHandlers(DependencyObject sender, object oldValue, object newValue);

protected void HandleEvent(object sender, EventArgs e)
{
DependencyObject dp = sender as DependencyObject;
if (dp == null)
{
return;
}

ICommand command = dp.GetValue(_property) as ICommand;

if (command == null)
{
return;
}

if (command.CanExecute(e))
{
command.Execute(e);
}
}

///
/// Listens for a change in the DependencyProperty that we are assigned to, and
/// adjusts the EventHandlers accordingly
///

///
///
public void PropertyChangedHandler(DependencyObject sender, DependencyPropertyChangedEventArgs e)
{
// the first time the property changes,
// make a note of which property we are supposed
// to be watching
if (_property == null)
{
_property = e.Property;
}

object oldValue = e.OldValue;
object newValue = e.NewValue;

AdjustEventHandlers(sender, oldValue, newValue);
}
}
}

2. Create a relay command class which inherits ICommand Interface. You can copy this code. An ICommand contains methods to execute commands. A command can be executed many times, and the parameter values can vary. This interface is mandatory on commands.

Namespace: System.Windows.Input
Assembly: PresentationCore (in PresentationCore.dll)

public class RelayCommand:ICommand
{
#region private fields
readonly Action _execute;
readonly Predicate _canExecute;
#endregion private fields

public event EventHandler CanExecuteChanged
{
add
{
if (this._canExecute != null)
CommandManager.RequerySuggested += value;
}
remove
{
if (this._canExecute != null)
CommandManager.RequerySuggested -= value;
}

}

public RelayCommand(Action execute)
: this(execute, null)
{
}

public RelayCommand(Action execute, Predicate canExecute)
{
if (execute == null)
throw new ArgumentNullException("execute");
_execute = execute;
_canExecute = canExecute;
}
[DebuggerStepThrough]
public bool CanExecute(object parameter)
{
return _canExecute == null ? true : _canExecute(parameter);
}

public void Execute(object parameter)
{
_execute(parameter);
}
}

3. Define a static class to hold a new Attached property that will attach to an object to specify to which command to execute when a particular event is raised. In this example, this is a mouse enter event in the canvas.

public static class CanvasMouseEnterBehaviours
{
public static readonly DependencyProperty MouseEnterCommand = EventBehaviourFactory.CreateCommandExecutionEventBehaviour(
Control.MouseEnterEvent,
"MouseEnterCommand",
typeof(CanvasMouseEnterBehaviours));

public static void SetMouseEnterCommand(Control o, ICommand command)
{
o.SetValue(MouseEnterCommand, command);
}

public static void GetMouseEnterCommand(Control o)
{
o.GetValue(MouseEnterCommand);
}
}

4. Create an ICommand property for Mouse Enter.
public ICommand MouseEnter
{
get
{
if (canvasMouseEnter == null)
canvasMouseEnter = new RelayCommand(param => this.CanvasMouseEnter(param));

return canvasMouseEnter;
}
}

5. Create a public method for your mouse enter event.
public void CanvasMouseEnter(object param)
{
code implementation
}

6. In your XAML, attached the behaviour of your element.






Tuesday, October 27, 2009

How to use DataTemplateSelector in WPF ContentControl

DataTemplateSelector provides a way to choose a data template based on the data object and the data-bound element.

Steps to implement DataTemplateSelector in ContentControl.

1. Create a class that inherits DataTemplateSelector.


2. Implement method SelectTemplate.

public override DataTemplate SelectTemplate(object item, DependencyObject container)
{
code here
}

3. In your XAML under resource, declare all data templates you wish to as example below.



4. Initialize your datatemplate selector class in reference to step number 1.



5. Under ContentControl:
ContentTemplateSelector="{StaticResource xMyTemplateSelector}"/>

Thursday, October 22, 2009

Syntax for Deleting Record to XML using LINQ

Steps in Editing an XML using LINQ and C#

1. Get the path of your XML file.

string fullXmlPath =
System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "file name.xml";

2. Load the path.

XElement LogXmlDocument = XElement.Load(fullXmlPath);

3. Prepare the data.

var navResultsPlant = LogXmlDocument.Descendants().Where(
e => e.Attribute("id").Value == id).FirstOrDefault();
if (navResultsPlant != null)
navResultsPlant.Remove();

4. Save.

LogXmlDocument.Save(fullXmlPath);

Thursday, October 15, 2009

Caliburn: An Application Framework for WPF

Today, I've learned how to use caliburn framework in Model-View-View Model(MVVM) designed pattern.
Without using the application framework, you can set your event in your view.xaml by this:



in your view.cs, you need to hard code this:
void MouseEnter(object sender, MouseEventArgs e)
{
//code here
}

using the implementation above, it breaks the rule of MVVM, the view classes have no idea that the model classes exist, while the ViewModel and model are unaware of the view.

but using caliburn, you need to add this to your view.xaml by



in your viewmodel.cs,
public void OnMouseEnter(MouseEventArgs e)
{
//code here
}

Thursday, October 8, 2009

Syntax for Editing Record to XML using LINQ and C#

Steps in Editing an XML using LINQ and C#

1. Get the path of your XML file.

string fullXmlPath =
System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "file name.xml";

2. Load the path.

XElement LogXmlDocument = XElement.Load(fullXmlPath);

3. Prepare the data.
a. Editing an Attribure

XElement propResults = LogXmlDocument.Elements("Property").Where(
e => e.Attribute("id").Value == id).FirstOrDefault();
propResults.SetAttributeValue("Description", desc);
propResults.SetAttributeValue("Manufacturer", manufac);

b. Editing an Element

XElement propResults = LogXmlDocument.Elements("Property").Where(
e => e.Attribute("id").Value == id).FirstOrDefault();
propResults.SetElementValue("Manufacturer", manufacturer);
propResults.SetElementValue("ModelNumber", modelnumber);
propResults.SetElementValue("Type", type);

4. Save.

LogXmlDocument.Save(fullXmlPath);

Thursday, October 1, 2009

Syntax for Adding Record to XML using LINQ

XML Hierarchy




Steps in Adding

1. Get the path of your XML file.

string fullXmlPath =
System.IO.Path.GetDirectoryName(System.Windows.Forms.Application.ExecutablePath) + "file name.xml";

2. Load the path.

XElement LogXmlDocument = XElement.Load(fullXmlPath);

3. Prepare the data.

LogXmlDocument.Add
(new XElement
("Property",
new XAttribute("id", newid),
new XAttribute("iid", sid),
new XElement("Identification", id),
new XElement("Description", desc),
new XElement("Manufacturer", manufac)
);

4. Save.

LogXmlDocument.Save(fullXmlPath);

Tuesday, September 29, 2009

Design Patterns

MVVM - Model-View-View Model
The controller is replaced with a view model. the view model sits below the UI layer. The view model exposes the data and command objects that the view needs. You could think of this as a container object that view goes to to get its data and actions from. The view model pulls its data from the model(s) below.

MVC - Model–View–Controller
The view sits at the top of the architecture, the controller sits below the view. The model sits below the controller. So the view knows about the controller, the controller knows the model. The view is notified when the model changes.

MVP - Model-View-Presenter
The controller is replaced with a presenter. The presenter sits at the same level as the view. The presenter listens to the events of both the view and the model and mediates the interactions between both the view and model.

Wednesday, August 26, 2009

Resource Stream in C# .Net

Steps on how to add and retrieve an instance of your resource file:

1. Right click the file, select Properties.

2. Under Build Action, select Embedded Resource as shown below



3. Syntax in retrieving an instance:

FrameworkElement content = new FrameworkElement();
Assembly asm = Assembly.GetExecutingAssembly();
Stream sre = asm.GetManifestResourceStream("namespace here);
content = XamlReader.Load(sre) as FrameworkElement;

Add ShadowEffect in C# UIElement

Syntax:

DropShadowEffect dropShadowEffect = new DropShadowEffect();
dropShadowEffect.ShadowDepth = 0;
dropShadowEffect.Direction = 10;
dropShadowEffect.BlurRadius = 15;
dropShadowEffect.Color = Colors.Gold;
fe.Effect = dropShadowEffect;

Tuesday, August 25, 2009

How to add link in HTML

Link syntax



Placing a target page of your link:
1. Blank - target page will be a blank page
syntax:


2. Self - target page will be its current browsing page
syntax:


Terms and Definition
URL(Uniform Resource Locator)

Download Sample Code Here

Monday, August 24, 2009

XML and LINQ



How to query in C# using LINQ

XDocument xmlFile = XDocument.Load(filename);
var xt = from y in xmlFile.Descendants("Users").Elements("details")
where y.Attribute("userName").Value == x
select new TempClass
{
Name = y.Element("userdetails").Attribute("userFirstName").Value
};


Download Sample Code Here

About Me

My photo
simple and straight forward