Wpf - Property Notification When Binding To Class Not Properties?
Jun 13, 2011
I have a window that contains different functional areas of an account. The details, roles, type, contracts The window's DataContext is set to the 'AccountViewModel'. Inside the AccountViewModel, there are properties one of them being 'Account' which contains the details. I need for the user to be able to update these details. How can I notifiy the properties to call my Update() code when they are changed?
I have yet to find a "nice" way to do two way databinding in .Net. The one thing I don't like for example in the present asp.net two way databinding is doing the binding in the aspx page is no compile time checking, ie:
Class Binder Public Sub BindControl(ctl As Control, objectProperty As ???????) '// Add ctl and objectProperty to a collection End Sub
What I don't know is possible is, how to receive the objectProperty in my example; I want to receive a reference (ie: a pointer) to the property, so later, via this reference, I can either read from or write to the property.
Can this somehow be done with delegates perhaps??
UPDATE: Note, I want to add the control reference to a binding collection, this collection would then be used for binding and unbinding.
I've searched as best as I can, and I can't find an answer to this specific problem that I have... WPF binding seems to be great and all, but I end up banging my head against the wall more often than not.
Okay, I have a singleton class which is ultimately the one that I'm binding to:
Imports System.ComponentModel Imports System.Collections.ObjectModel Public Class AmandaSeyfried
[Code].....
If I throw some break points on the Getter and Setters of the CountryTranslation class, I can monitor when they're being changed (via the datagrid, so binding is working), but try as I might I can't figure out how to raise an event based upon that back in the main class to subsequently update the datastore to show the changes.
I'm creating a UserControl that draws a simple radial gauge. I need it to be very customizable; the user should be able to customize everything such as the colors, fonts, sizes. So, I just made a property for every customizable detail. For example, I had ScaleFont, ScaleColor, ScaleStart, ScaleEnd, ScaleInnerRadius, ScaleOuterRadius, ScaleTickmarkFrequenty, etc.. etc.. etc...
Because there are so many properties about the same subject, I wanted to 'group' these properties into one "property". I've seen this done loads of times in third party controls, but I've never done it before myself.The idea is that the properties can be accessed like
So far, I tried creating a class for each group, for example a clsScaleSettings class, containing properties like Font, Color, Start, End, InnerRadius, OuterRadius, TickmarkFrequenty, etc (corresponding to the same properties as above).
Then, for every 'group' or class, I create a Property. For example, I have the ScaleSettings property, which simply returns an instance of the clsScaleSettings class (I initialize the instance only once of course):
vb.net Private _ScaleSettings As New clsScaleSettings Public Property ScaleSettings() As clsScaleSettings
[code]....
Now, this works in the code editor. I can now use
Gauge1.ScaleSettings.Font = Me.Font
for example, and it sets the font correctly.But, I does not work in the designer, in the Property Grid. The whole reason I made the effort to move and rename nearly all properties (about 70!), and all references to those properties, to separate classes, was so that the user could design the gauge more easily using the Property Grid!Instead of having 15 settings related to the scale, scattered all over the Property Grid, he can now have one ScaleSettings property, which he can expand, and then he can edit the properties of that group easily.The ScaleSettings property is greyed out in the property grid... So I cannot expand it and view it's underlying properties.
I'm working on a Hazardous Materials label printing program. One of the options is to do an "NFPA" label. Since there are 4 values required with 4 or 6 options, the ratings are entered via radio buttons in a group box. That's working okay. I display values in the NFPA diamond as they're entered: left quadrant blue, top quadrant red, left yellow, bottom red. I'm having trouble with the label in which the rating will be displayed on top of a jpg diamond for the white. In this quadrant the text can be up to 4 characters. I can accept the text going into an adjacent block a little, but the corners of the label overlap into another quadrant/color. I reduced the font size which solved the overlap problem but the font is then too small and looks terrible. I tried to make the background of the label transparent to let the color come through correctly but that's not a valid value for label.background. I'm figuring that the transparent background is the best solution. What can I use that will accept a transparent background so the color shows through?
I'm trying to set the transparent property via label properties properties, not via code. Here's the code if it makes any difference:
Public Class NFPA Private Sub Button1_Click(ByVal sender As System.Object, ByVal e As System.EventArgs) Handles Button1.Click Close() End Sub
I've reviewed the links that were offered and don't find an answer. Neither has a lot of searching helped, probably because I can't think of a reasonably short way to ask the question. I hope that I've at least found the proper forum and category.
In my VB 2010 code, I've defined a structure that has about 30 elements. I want to sum the properties (they are all singles) of two members of the corresponding collection. I understand that I can do something like:
member1.property1=member2.property1+member 3.property1 for the entire set of properties of member2 and member3 to produce a completely defined member1 What I wonder is whether or not there is a way that uses fewer lines of code - I know that I can't do:member1=member2+member3, for example.
it's about object binding, yes it's just a simple binding. but i don't know why it won't work.for summary, i will write about what i am doing:
1. i have one solution, and have two project in it. WaitressDataWin and WaitressDataObject
2. inside WaitressDataWin, i have 'waitressdata.vb' . this is my simple form , there are some basic textbox (waitress name, address, phone)
3. inside WaitressDataObject, i have 'waitressDataObj.vb' is where i put my object class, i have WaitressName property, WaitressAddress, and Phone.one of my property is like this, others are same except the name of course.
Private _WaitressName As String ''' <summary> ''' Gets or sets the Waitress Name[code]....
4. i create data source , that is object data source. i add reference so i can add my second project which is WaitressDataObject and set the WaitressDataObj as the data source.now i have datasource with three properties (WaitressName, WaitressAddress, Phone)
5. I bind my textbox, by dragging the WaitressName (in datasource) to my waitressname textbox .. so on to all my properties.., i also get bindingsourcecomponent, WaitressDataObjectBindingSource
6. then I put this code to my form load :
dim wdm = new WaitressDataObj Me.WaitressDataObjectBindingSource.DataSource = wdm
7. done, it should've been worked, but it didn't , i don't know why.. , every time i fill one of my textbox, the properties didn't set the value, i put breakpoint in the 'set' part of all my properties but it never breaks anyway.. (the 'get' part is good, it read my property value when i load the form). so i just had problem in my 'SET' Part.
8. I think i had checked on my variable (word, case sensitive,etc), no problem.
My problem is similar to the one described in this article, but I'm trying to use a different grid(DevExpress.xtraGrid) and therefore the answer (if it even works) does not apply for me: Binding Collection to DataGrid without showing all columns
Briefly, I'm binding the grid to the collection of custom objects - cMessage - to grid's datasource, but I don't want all the propertieties of the cMessage to be shown in the grid. Is there any way to hide some properties from the binding, while leaving them acessible from outside (ie.leave them as public or friend)?
This is another one of my "I think it's not possible but I need confirmation" questions.I have a base class for a bunch of child classes. Right now, this base class has a few common properties the children use, like Name. The base is an abstract class (MustInherit)Technically, this means that everytime a child class is instantiated, it lugs around, in memory, its own copy of Name. The thing is, Name is going to be a fixed value for all instances of a given child. I.e., Child1.Name will return "child_object1", and Child2.Name will return "child_object2".
I have a class in which some of the fields are also classes.I can put values in the "normal" properties, but in the others when o try to assign values it gives the: "Object reference not set to an instance of an object"But the code compiles fine.
dados_Defenicao = New ServiceReference1.draftClaimEntryDefinition dados_Defenicao.arCode = "123" dados_Defenicao.claimMarket.warrantyType = "w" - Here it gives the error
I have a class in which some of the fields are also classes.
I can put values in the "normal" properties, but in the others when o try to assign values it gives the: "Object reference not set to an instance of an object"
But the code compiles fine.
dados_Defenicao = New ServiceReference1.draftClaimEntryDefinition dados_Defenicao.arCode = "123" dados_Defenicao.claimMarket.warrantyType = "w" - Here it gives the error
I have a very simple class that holds a few public properties - ID, Text, Colour, etc. and a Boolean called 'SelectedItem'. Just like the Checked property on RadioButtons, only one item can have its SelectedItem property set to True within a particular group. Note: there will be several separate groups (lists), each allowed to have only one item with SelectedItem = True.
My first thought was that I would probably just have to handle everything outside of the class, setting SelectedItem to False for every other item in a particular list when another item was selected. But that seems rather inelegant to me. So I've been trying to think of how this might be done within the class. For example: could I perhaps have a private string property called say "GroupName" - set in the New sub when adding a new instance of the class - and then use a private shared method to set every item's SelectedItem property to False, provided the item has the same GroupName as the newly selected item? I would have a go at doing this but I have no idea how to enumerate every instance of a class from within that class, or whether that's even possible. Is it? Or is there another (better) way to achieve my goal? Here is a cut-down version of what I've got so far:
Public Class ResourceItem Public ID As Integer Public Text As String[code]....
As can be seen: instead of instantiating a new ResourceItem and passing that as an argument to the manager's Add procedure, I'm simply passing the details of the new item and the procedure is creating the item from those. I don't know whether this is a good or bad idea - please advise - but I've done it because I couldn't figure out how to make the SelectedItem property only writeable by the manager, so I wanted to avoid having directly accessible objects that could have their SelectedItem property set to True without it deselecting all the other items in the same group. Of course that still leaves the possibility of setting a variable to one of the manager's list items and setting it from there, so I would still like to know how I could prevent that, if possible.
UPDATE: I didn't use the code above in the end, deciding instead to go with Cyborgx37's solution - which seems to work perfectly well for me despite the warnings about best practice. I also realised I would need to use the same class in another scenario where multiple items could be selected, so it was easy to add a Boolean property to the manager to enable that.
My problem is similar to the one described in this article, but I'm trying to use a different grid (DevExpress.xtraGrid) and therefore the answer (if it even works) does not apply for me: [URL]
Briefly, I'm binding the grid to the collection of custom objects - cMessage - to grid's datasource, but I don't want all the propertieties of the cMessage to be shown in the grid. Is there any way to hide some properties from the binding, while leaving them acessible from outside (ie.leave them as public or friend)?
Im doing my first project with WinForms, and Im trying to get the DataBinding working. Theres no database in my project, but I'd like to bind some of the TextBoxes to objects' properties. In the other section of this forum (here) I found this line of C# code which does it: textBox2.DataBindings.Add(new Binding("Text", this.myPerson, "LastName"));
my question is can data binding to object properties be set up during design time (without writing code)? If so, how? P.S. I know how I would set up this binding if in WPF, but I'm forced to use WinForms.
The following XAML produces an AmbiguousMatchException. The DataContext for myText is a DataTable consisting of > 1 row which contains a DataColumn named "test":
Say I wanna bind to dictionary that TKey is string with XAML:<Label DataContext="{MyDictionary}" Content="{Binding Item("OK")}" />Doesn't work.How should I do it?
What is the best way to bind a property to a control so that when the property value is changed, the control's bound property changes with it.So if I have a property "FirstName" which I want to bind to a textbox "txtFirstName" text value. If I change FirstName to "Stack" the txtFirstName.Text also changes to "Stack".
I have a project in WPF 4 and VB.net 2010. I want to bind the volume property of a mediaelement to a variable in another module. Mind you, the variable is in the correct data type, so no conversion is necessary
First, I am making the assumption that anything you can do in "Attribute Syntax" (AS), you can do in "Property Element Syntax" (PES), but not vice-versa. That is the reason I intend on coding completely in PES if possible. I have encountered quirks though.The first issue is regarding AS "x:Name" or PES "<FrameworkElement.Name>": If I use PES, I must make sure it is the last element, otherwise any PES below it will error on build; eg "Value of type 'System.Windows.ResourceDictionary' cannot be converted to 'Namespace.ClassName'."
A problem encountered intermixing AS and PES: Set "x:Name" and "MinWidth" as AS. Set "Title" as PES.
Is there any reason why a picture box wouldn't be saving the image location and loading it into the box the next time the window loads through the picture box property binding 'ImageLocation'?
I develped custom DateTimepicker in vb.net that users can pick date in persian lanquege with it.in my main contrl class i have bindable property with name "Value". here is the property code :
<Editor(GetType(TypeEditor), GetType(UITypeEditor)), Browsable(True), _ Bindable(True)> _ Public Property Value As String
Public Class MyColorsClass 'Constructors Public Sub New() 'Empty Constructor
[code]....
However, if the empty constructor was called to instatiate this class then the colortype is not yet set. Therefore, if one accesses the 'IsColorCool' property it will always return 'False'. Now for the sake of this example, I must keep the empty constructor as part of the class.Now I could add some code in the 'IsPropertyCool' to check and see if a ColorType has been defined, and throw an exception if it has not been set, but I don't really want to do that.I also could always move the logic OUT of the property and into a method on the class called 'DefineIfColorIsCool' or something, and make the owness on the caller to make sure the method was called if they want to use the property 'IsColorCool'?
Public Class airplane Private var_num_seats As Integer Private var_num_engines As Integer
[code]....
Obviously, I don't wish that the class Glider has the method "start_engines" neither the property "num_engines". Otherwise, other child classes may have. How can I supress these property and method in child class, not just ignoring (if I can)?
I have procedure (Import) that calls a for a new instance of frmImportData. I also have a class name clsBatch that has a data table property called prpParametersTable.For some reason, I get an error (indicated below with ERROR>>>) when trying to assign prpParameterTable to cv_dtImport2. The error states "Object reference not set to an instance of an object.". Why does this error not happen when I assign dtBP to cv_dtImport1? Both cv_dtImport1 and cv_dtImport2 are equal to Nothing and in my Import procedure dtBP = prpParametersTable.
Public Sub Import(ByVal clsB As clsBatch) Try Me.cv_clsB = clsB
I have three class files, accounts.vb and transactions.vb in addition to my form.vb. I am unable to retrieve a member variable from on class from inside the other. When the combobox index changes, the program loads the correct account (checking or saving) from two different sequential files. I don't think I have the calcBalance procedure in the correct class file. And that is what I am having trouble with. Accessing it to display it. [Code]
I'm having trouble with some Silverlight functionality. My goal is to get some data from the database and display it in my grid. Sounds simple, however, there are 7 columns that are always going to be there. The rest of the columns depends on the account. There could be 2 (called Actions) associated with a certain account, compared to another account that could have 5, and the action names can be completely different. I have successfully been able to return a list of all the possible actions for the given account, and then adding the columns to the grid in the code bihind(VB), and I can bind my data to the grid for all the columns that are already known. The way I store the item's actions, is a Property of type List. My problem is finding a way to iterate through the actions list of the Item object in order to bind those actions to the grid.
During Loading a form, I bind a datasource property of the DGV to the bindingsource, and then set the fillweight property of the DGV columns. But, after form being shown, earlier set properties are being reseted to default = 100.
The procedure is like: 1. TestForm.Show() 2. TestForm_Load(...) Hnadles MyBase.Load DGV.DataSource = bindingsource DGV.columns(0).fillweight = 80 DGV.columns(1).fillweight = 120 3. Me.close() (Closing the form which called TestForm.Show()
And now I have visible a TestForm with well binded datasouce seeing all the columns, but their fillweith property was beeing reseted...