|
Thanks for the response!
Looks like memento pattern is the solution. Let me understand and try it.
-- modified 27-Oct-12 14:15pm.
|
|
|
|
|
Like Eddy said, there is no right or wrong to do it, using observable collections, you could have 2 and a flag, if the record is dirty (meaning that was modify) then in the save event in your viewmodel you just save the record, if cancel was hit and it was dirty then restore from either the db. again (re-read the record) or copy it from the other collection. What I mean with the 'imports' is that the 'Message' needs a import on the viewmodel.
|
|
|
|
|
There are essentially two ways to do this. The first is what you've done: copy the object, have the dialog operate on that copy, and update the original if you press OK. The second is rather similar, but instead of having a copy of the base data object to operate on, you operate on a specific data object for the form (i.e. it has properties for the fields that are editable on this form only), and if you press OK you assign all the properties from that data object into the source.
In the second case the data object can actually be the form itself, particularly with WPF's data binding that allows you to have UI controls display numbers, enum choices etc simply. This is normally what I do.
Re undo/redo, you need to save a command when you change the original object, i.e. press OK. Do you need to be able to undo each thing individually? ... I would normally expect 'Edit Object' to end up as a single undo action which is easier (you just have a command which stores the properties that were changed and the previous value, or even the whole before and after states, of the source object). If you do need undo entries for every dialog interaction then you need to have a local command stack within the dialog, and when you save the object you can execute them all in order on the source object and push them onto the global undo stack against that object.
|
|
|
|
|
|
Hi I'd like to run a method of a class calling it using its name in string format. Is it possible using reflection??
Thanks a lot
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Reflection;
namespace testMenu
{
class Program
{
static void Main(string[] args)
{
Type r = typeof(MyClass);
r.InvokeMember('a',null,null,ob....).
}
}
class MyClass
{
public static void a()
{
Console.WriteLine("Have good time");
}
}
|
|
|
|
|
TheGermoz wrote: Is it possible using reflection?
As stated no.
A method belongs to a class.
The class belongs to a namespace.
A class belongs to an assembly.
You must at least know about class/namespace/assembly to call a method.
If the class is in another assembly then you must load the assembly.
Then you must properly access the method.
|
|
|
|
|
False – the question has access to the class he wants to look up in and once you've got the Type then you can use reflection on it.
|
|
|
|
|
BobJanova wrote:
False – the question has access to the class he
wants to look up in and once you've got the Type then you can use reflection on
it.
I was wondering what the 1 votes were about....
So tell me - exactly how often have you found it useful to invoke a method of class within the same class?
Myself I would just call the method.
I answered the question for the cases that are actually useful.
|
|
|
|
|
You answered a question which wasn't the one that was actually asked, in a way which is likely to confuse the questioner.
Reflection is rarely useful full stop in my work, apart from loading types in from assemblies for plugins (which conform to a static interface so I don't use reflection for method lookups at all). The only place where I can see method lookups being useful is if you're trying to implement a scripting language or similar, at which point I can definitely see it being a case of looking up a method by name inside a (statically) known class (e.g. typeof(SomeClass)).
|
|
|
|
|
BobJanova wrote: if you're trying to implement a scripting language
If I was doing a script language I would compile it before interpreting it and thus the linkage would still be explicit rather than dynamic.
|
|
|
|
|
public void InvokeAMethod(string name, string arg)
{
var type = this.GetType();
var method = type.GetMethod(name);
method.Invoke(this, new object[] { arg });
}
public void aMethod(string test)
{
Console.WriteLine(test);
}
|
|
|
|
|
|
Not really. It was Microsoft's implementation of Reflection that was brilliant
|
|
|
|
|
Bear in mind that reflection is slow; you shouldn't use it unless you don't know what you want to run at compile time (e.g. you are running commands based on user input, or you do not have a compile time reference to the class or a relevant interface through which to bind statically).
|
|
|
|
|
I have a simple WCF service with one interface and one class. When I add a service reference to my console apps, my WCF service class is not getting the expected name. My WCF service class name is service1 but it is exposed to the client end as Service1Client.
Why is the word "Client" being added before my actual class name? Do I need to add anything in my web.config for the service or in the app.config for the console end?
tbhattacharjee
|
|
|
|
|
This is not a C# question, it would be better posted in the WCF forum.
One of these days I'm going to think of a really clever signature.
|
|
|
|
|
Tridip Bhattacharjee wrote: Why is the word "Client" being added before my actual class name? You can select any class name you want in the Add Service Reference dialog.
/ravi
|
|
|
|
|
really i just do not understand what u trying to say. where we add service then we have to give service reference name. i gave service reference name say myfirstservice but when i type myfirstservice and dot then my class name is not appearing like "Myservice" rather a class name appear called "Myserviceclient" why the word "client" is being added before my actual class name and expose to client end.
tbhattacharjee
|
|
|
|
|
My apologies Tridip, I read your question too hastily.
/ravi
|
|
|
|
|
anyway no prob.....thanks
tbhattacharjee
|
|
|
|
|
I would verify your WCF Service Project Name and/or your Namespaces. Also, in the rare case that you renamed the WCF Service Project, I've found it's wise to just start over (i.e. delete the project and create a brand new one with the name you want) vs. figuring out all the things you need to also rename behind the scenes.
Russ
|
|
|
|
|
Hi
I'm trying to build a program which will read and assign to variables the values from an XML file which goes like this (without the *):
<*n1> random number here <*/n1>
<*n2> random number here <*/n2>
I tried to use the XmlTextReader but I got an error when I passed the location of the file
("C:\\Documents and Settings\\myfile.xml") so I tried the XmlDocument and it's function SelectSingleNode("n1") but I got another error.
So what's the best way to get the values from this XML file? (I also want to show an error message if the XML file is not built as I mentioned (<*n1> <*/n1> <*n2> <*/n2>).
thanks
|
|
|
|
|
gibsray wrote: but I got an error when I passed the location of the file
I tried the XmlDocument and it's function SelectSingleNode("n1") but I got another error. We can't read your mind. What errors did you receive?
/ravi
|
|
|
|
|
I very much doubt that your file is in the root of the Document and Settings folder. Perhaps you should double check that your path is valid.
I wasn't, now I am, then I won't be anymore.
|
|
|
|
|
You need a root. You did not provide the error, so so not know what the exact issue is, but can only have one root node.
<items>
<*n1>random number here </*n1>
<*n2>random number here </*n2>
</items>
Of course this is not good xml either. XML will object to the *, and there is no * before the backslash.
|
|
|
|