C# WINDOWS PHONE 7 : Databinding - Valueconverter

Status
Niet open voor verdere reacties.

droopy4u

Nieuwe gebruiker
Lid geworden
10 jan 2012
Berichten
4
Ik heb een probleem met mijn data binding, value converter.

Graag zou ik een visuele indicatie bekomen ifv de status van de ActvityIndication.

Mainpage.xaml :
Code:
        <StackPanel Name="stpIndicator">
            <StackPanel.Resources>
                <aid:ConverterBool2Fill x:Key="bool2BrushConverter"></aid:ConverterBool2Fill>
            </StackPanel.Resources>

            <!-- UpdateSourceTrigger=bActvityIndication, -->
            <Rectangle Name="recNetworkActivity" 
                       Fill="{Binding ActvityIndication, Path=bActvityIndication,               
                       Converter={StaticResource bool2BrushConverter}}"
                       HorizontalAlignment="right"
                       VerticalAlignment="Top"
                       Width="50" Height="50"
                       Margin="15,15,15,15"  Stroke="White" StrokeThickness="2"></Rectangle>
        </StackPanel>

MainPage.xaml.cs roept de singleton op van de ActivityIndication, en met de codebehind kan de status via buttons worden verandert.

Code:
        private void Set_Click(object sender, RoutedEventArgs e)
        {
            ActivityIndication.Instance.Set();
        }

        private void Reset_Click(object sender, RoutedEventArgs e)
        {
            ActivityIndication.Instance.Reset();
        }
Capture.PNG

binding source - ActivityIndication :
Code:
        private bool _bActvityIndication;

        public bool bActvityIndication {
            get {   return _bActvityIndication; }
            private set {   _bActvityIndication = value;
                    NotifyPropertyChanged("bActvityIndication");
            }
        }


        public void Set() {
            bActvityIndication = true;
        }


        public void Reset()
        {
            bActvityIndication = false;
        }

        public void Change(bool status) {
            bActvityIndication = status;
        }

        #region "PropertyChanged"
         public event PropertyChangedEventHandler PropertyChanged;

        // Notifies, brengt de databinding op de hoogte van een waarde verandering van een property.
        private void NotifyPropertyChanged(string propertyName)
        {
            var propertyChanged = PropertyChanged;
            if (propertyChanged != null)
            {
                // lanceert PropertyChanged event.
                propertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
        #endregion

    }

En de value converter zal de aanpassing van boolean naar fill [brush] aanpassen.
ConverterBool2Fill :
Code:
    public class ConverterBool2Fill : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter,
                              CultureInfo culture)
        {
            // value - true : green | false : red | anders niets doen
            Brush b = new SolidColorBrush(Colors.Transparent);

            if (value != null && value.GetType() == typeof(bool))
            {
                b = (bool)value ?
                    new SolidColorBrush(Colors.Green) :
                    new SolidColorBrush(Colors.Red);
            }

            return b;
        }


Echter ik krijg de foutmelding :
Code:
The property 'System.Windows.Data.Binding.Path' is set more than once. [Line: 37 Position: 24]
meer in detail
Code:
System.Windows.Markup.XamlParseException occurred
  Message=The property 'System.Windows.Data.Binding.Path' is set more than once. [Line: 37 Position: 24]
  LineNumber=37
  LinePosition=24
  StackTrace:
       at System.Windows.Application.LoadComponent(Object component, Uri resourceLocator)
       at PhoneApp_ValueConverter.MainPage.InitializeComponent()
       at PhoneApp_ValueConverter.MainPage..ctor()
       at System.Reflection.RuntimeConstructorInfo.InternalInvoke(RuntimeConstructorInfo rtci, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
       at System.Reflection.RuntimeConstructorInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
       at System.Activator.InternalCreateInstance(Type type, Boolean nonPublic, StackCrawlMark& stackMark)
       at System.Activator.CreateInstance(Type type)
       at System.Windows.Navigation.PageResourceContentLoader.BeginLoad_OnUIThread(AsyncCallback userCallback, PageResourceContentLoaderAsyncResult result)
       at System.Windows.Navigation.PageResourceContentLoader.<>c__DisplayClass4.<BeginLoad>b__0(Object args)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(RuntimeMethodInfo rtmi, Object obj, BindingFlags invokeAttr, Binder binder, Object parameters, CultureInfo culture, Boolean isBinderDefault, Assembly caller, Boolean verifyAccess, StackCrawlMark& stackMark)
       at System.Reflection.RuntimeMethodInfo.InternalInvoke(Object obj, BindingFlags invokeAttr, Binder binder, Object[] parameters, CultureInfo culture, StackCrawlMark& stackMark)
       at System.Reflection.MethodBase.Invoke(Object obj, Object[] parameters)
       at System.Delegate.DynamicInvokeOne(Object[] args)
       at System.MulticastDelegate.DynamicInvokeImpl(Object[] args)
       at System.Delegate.DynamicInvoke(Object[] args)
       at System.Windows.Threading.DispatcherOperation.Invoke()
       at System.Windows.Threading.Dispatcher.Dispatch(DispatcherPriority priority)
       at System.Windows.Threading.Dispatcher.OnInvoke(Object context)
       at System.Windows.Hosting.CallbackCookie.Invoke(Object[] args)
       at System.Windows.Hosting.DelegateWrapper.InternalInvoke(Object[] args)
       at System.Windows.RuntimeHost.ManagedHost.InvokeDelegate(IntPtr pHandle, Int32 nParamCount, ScriptParam[] pParams, ScriptParam& pResult)

Ondanks dat ik geen foutmeldingen krijg en de file lijkt geupload te zijn, is deze niet ter beschikking (is kleiner dan 100kb).

-
[VERSIE 1]

Bijlage kunt u terug vinden :

RAR - http://www.4shared.com/rar/G_VBLorz/PhoneApp_ValueConverter.html
ZIP - http://www.4shared.com/zip/TPrV4kgE/PhoneApp_ValueConverter.html

Ik wil deze op meerdere pagina's gebruiken, vandaar de databinding.
In een andere versie heb ik gewerkt met ObservableCollection, echter hier krijg ik dezelfde foutmelding.
Code:
    // wordt toegevoegd via de singleton pattern
    public class ListActivityIndication : ObservableCollection<ActivityIndication>
    {
        
    }
[VERSIE 2 - ObservableCollection]

Bijlage kunt u terug vinden :

RAR - http://www.4shared.com/rar/4xTl_d9V/PhoneApp_ValueConverter_v2.html
ZIP - http://www.4shared.com/zip/Y27aMxQP/PhoneApp_ValueConverter_v2.html

Alvast bedankt bij voorbaat.
 
Laatst bewerkt:
Status
Niet open voor verdere reacties.
Terug
Bovenaan Onderaan