Windows Vista Forums
Vista Forums Home Join Vista Forums Windows 7 Forum Vista Tutorials Tags
Welcome to Windows Vista Forums. Our forum is dedicated to helping you find solutions with any problems, errors or issues you are experiencing with Windows Vista. The Vista forum also covers news and updates and has an extensive Windows Vista tutorial section that covers a wide range of tips and tricks.


Go Back   Vista Forums > Misc Newsgroups > Avalon

RB

Vista - DataBinding to indexer

 
 
09-20-2006   #1
=?Utf-8?B?QWxleEI=?=


 

DataBinding to indexer

Hi all,

I'm searching for a solution to bind a UIElement to a custom Data object
with dynamic number of properties.

The first idea was to wrap all values-properties, those I want to bind, in a
collection ( Dictionary<Attribute, string> _properties )
The access to values would be provided through an indexer:

public Attribute this[string propertyName]
{
get { return _properties[propertyName];}
set ....
}

to bind the indexer to UI property name schould be something like that:
for example in code:
Binding b1 = new Binding ("["+0+"]");
Binding b1 = new Binding ("["+1+"]"); and so on..

or in XAML: Text="{Binding Path=[someName]}"

so that works really good for geting data to ui. But what i'm missing here
is notification of one property's changes. If my custom class would implement
INotifyPropertyChange, I could fire for example PropertyChange("[0]"), but
this doesn't work. If I fire PropertyChange(""); with empty string as
parameter, then I can get updates, but each item in the property list will be
called. Thats not prety nice. I'm confused.

Any simple ideas, how to notify the ui about property chnage of an
individual property from the list???

Thanks a lot

My System SpecsSystem Spec
09-21-2006   #2
Ifeanyi Echeruo [MSFT]


 

Re: DataBinding to indexer

System.Collections.Specialized.INotifyCollectionChanged in WindowsBase.dll
is your friend

-- Ifeanyi Echeruo [MSFT]
This posting is provided "AS IS" with no warranties, and confers no rights.

"AlexB" <AlexB@discussions.microsoft.com> wrote in message
news:6224DDD3-78D7-4E00-BB3A-C7A073405BDB@microsoft.com...
> Hi all,
>
> I'm searching for a solution to bind a UIElement to a custom Data object
> with dynamic number of properties.
>
> The first idea was to wrap all values-properties, those I want to bind, in
> a
> collection ( Dictionary<Attribute, string> _properties )
> The access to values would be provided through an indexer:
>
> public Attribute this[string propertyName]
> {
> get { return _properties[propertyName];}
> set ....
> }
>
> to bind the indexer to UI property name schould be something like that:
> for example in code:
> Binding b1 = new Binding ("["+0+"]");
> Binding b1 = new Binding ("["+1+"]"); and so on..
>
> or in XAML: Text="{Binding Path=[someName]}"
>
> so that works really good for geting data to ui. But what i'm missing here
> is notification of one property's changes. If my custom class would
> implement
> INotifyPropertyChange, I could fire for example PropertyChange("[0]"), but
> this doesn't work. If I fire PropertyChange(""); with empty string as
> parameter, then I can get updates, but each item in the property list will
> be
> called. Thats not prety nice. I'm confused.
>
> Any simple ideas, how to notify the ui about property chnage of an
> individual property from the list???
>
> Thanks a lot



My System SpecsSystem Spec
09-22-2006   #3
Douglas Stockwell


 

Re: DataBinding to indexer

Hi Ifeanyi,

Is there going to be any better documentation for INotifyCollectionChanged
in the SDK?

1. The constructors for NotifyCollectionChangedEventArgs are very difficult
to follow. Static factory methods named Add, Move, Remove etc would be much
simpler.
2. I did a complete collection implementation of INotifyCollectionChanged
and passed it to a ListCollectionView. But when firing collection changed
events I got back exceptions stating that Range changes are not supported.
This doesn't seem to be mentioned anywhere. I had to go back and hack my
collection to fire a number of change events for each Ranged change

Do any classes actually support ranged changes?

- Doug

"Ifeanyi Echeruo [MSFT]" <ifeanyie@online.microsoft.com> wrote in message
news:OUVX5Za3GHA.3344@TK2MSFTNGP05.phx.gbl...
> System.Collections.Specialized.INotifyCollectionChanged in WindowsBase.dll
> is your friend
>
> -- Ifeanyi Echeruo [MSFT]
> This posting is provided "AS IS" with no warranties, and confers no
> rights.
>
> "AlexB" <AlexB@discussions.microsoft.com> wrote in message
> news:6224DDD3-78D7-4E00-BB3A-C7A073405BDB@microsoft.com...
>> Hi all,
>>
>> I'm searching for a solution to bind a UIElement to a custom Data object
>> with dynamic number of properties.
>>
>> The first idea was to wrap all values-properties, those I want to bind,
>> in a
>> collection ( Dictionary<Attribute, string> _properties )
>> The access to values would be provided through an indexer:
>>
>> public Attribute this[string propertyName]
>> {
>> get { return _properties[propertyName];}
>> set ....
>> }
>>
>> to bind the indexer to UI property name schould be something like that:
>> for example in code:
>> Binding b1 = new Binding ("["+0+"]");
>> Binding b1 = new Binding ("["+1+"]"); and so on..
>>
>> or in XAML: Text="{Binding Path=[someName]}"
>>
>> so that works really good for geting data to ui. But what i'm missing
>> here
>> is notification of one property's changes. If my custom class would
>> implement
>> INotifyPropertyChange, I could fire for example PropertyChange("[0]"),
>> but
>> this doesn't work. If I fire PropertyChange(""); with empty string as
>> parameter, then I can get updates, but each item in the property list
>> will be
>> called. Thats not prety nice. I'm confused.
>>
>> Any simple ideas, how to notify the ui about property chnage of an
>> individual property from the list???
>>
>> Thanks a lot

>
>


My System SpecsSystem Spec
09-22-2006   #4
Ifeanyi Echeruo [MSFT]


 

Re: DataBinding to indexer

I'll pass your comments on the the SDK folks.
I dont know of any controls that accept range changes. I'll ask the
databinding team to comment.

-- Ifeanyi Echeruo [MSFT]
This posting is provided "AS IS" with no warranties, and confers no rights.


My System SpecsSystem Spec
09-25-2006   #5
=?Utf-8?B?QWxleEI=?=


 

Re: DataBinding to indexer

Hi Ifeanyi,

i think with INotifyCollectionChanged i can notify some changes in a
collection like remove or add items to colletion. But what i need is
notification of changes of one item's data, which is databinded to an UI
dependency property. I don't want datatabind UI to a list of items
(ObservableCollection), that is simple. What i want is databinding an UI
property to one ListItem and another UI property to another Listitem from
the same collection. With indexer i'm able to get data to UI for
initialzation, but i can't find a way for notification of chages in items?

"Ifeanyi Echeruo [MSFT]" wrote:

> I'll pass your comments on the the SDK folks.
> I dont know of any controls that accept range changes. I'll ask the
> databinding team to comment.
>
> -- Ifeanyi Echeruo [MSFT]
> This posting is provided "AS IS" with no warranties, and confers no rights.
>
>
>

My System SpecsSystem Spec
09-25-2006   #6
Douglas Stockwell


 

Re: DataBinding to indexer

I think you're looking for INotifyPropertyChanged.

- Doug

"AlexB" <AlexB@discussions.microsoft.com> wrote in message
news:F730B1CE-118F-4CB0-823E-4C487FDA4CE6@microsoft.com...
> Hi Ifeanyi,
>
> i think with INotifyCollectionChanged i can notify some changes in a
> collection like remove or add items to colletion. But what i need is
> notification of changes of one item's data, which is databinded to an UI
> dependency property. I don't want datatabind UI to a list of items
> (ObservableCollection), that is simple. What i want is databinding an UI
> property to one ListItem and another UI property to another Listitem from
> the same collection. With indexer i'm able to get data to UI for
> initialzation, but i can't find a way for notification of chages in items?
>
> "Ifeanyi Echeruo [MSFT]" wrote:
>
>> I'll pass your comments on the the SDK folks.
>> I dont know of any controls that accept range changes. I'll ask the
>> databinding team to comment.
>>
>> -- Ifeanyi Echeruo [MSFT]
>> This posting is provided "AS IS" with no warranties, and confers no
>> rights.
>>
>>
>>


My System SpecsSystem Spec
09-25-2006   #7
=?Utf-8?B?QWxleEI=?=


 

Re: DataBinding to indexer

Yes you are right. But if use PropertyChangedEvent with an indexer like that:
PropertyChange("[3]"); this doesn't work, although the property in UI is
databinded to my indexer with for example Text="{Binding Path=[3]}"

"Douglas Stockwell" wrote:

> I think you're looking for INotifyPropertyChanged.
>
> - Doug
>
> "AlexB" <AlexB@discussions.microsoft.com> wrote in message
> news:F730B1CE-118F-4CB0-823E-4C487FDA4CE6@microsoft.com...
> > Hi Ifeanyi,
> >
> > i think with INotifyCollectionChanged i can notify some changes in a
> > collection like remove or add items to colletion. But what i need is
> > notification of changes of one item's data, which is databinded to an UI
> > dependency property. I don't want datatabind UI to a list of items
> > (ObservableCollection), that is simple. What i want is databinding an UI
> > property to one ListItem and another UI property to another Listitem from
> > the same collection. With indexer i'm able to get data to UI for
> > initialzation, but i can't find a way for notification of chages in items?
> >
> > "Ifeanyi Echeruo [MSFT]" wrote:
> >
> >> I'll pass your comments on the the SDK folks.
> >> I dont know of any controls that accept range changes. I'll ask the
> >> databinding team to comment.
> >>
> >> -- Ifeanyi Echeruo [MSFT]
> >> This posting is provided "AS IS" with no warranties, and confers no
> >> rights.
> >>
> >>
> >>

>
>

My System SpecsSystem Spec
 

RB


Thread Tools


Similar Threads for: DataBinding to indexer
Thread Forum
ASP.NET two way databinding with nulls .NET General


Vista Forums is an independent web site and has not been authorized,
sponsored, or otherwise approved by Microsoft Corporation.
"Windows Vista", the Start Orb, and related materials are trademarks of Microsoft Corp.
© Designer Media Ltd