コード例 #1
0
            public void Dispose()
            {
                LinkedListNode <PriorityBindingEntry> binding = Interlocked.Exchange(ref _binding, null);

                if (binding == null)
                {
                    // Some system is trying to remove binding twice.
                    Debug.Assert(false);

                    return;
                }

                PriorityBindingEntry entry = binding.Value;

                if (!entry.HasCompleted)
                {
                    _bindings.Remove(binding);

                    entry.Dispose();

                    if (entry.Index >= _priorityLevel.ActiveBindingIndex)
                    {
                        _priorityLevel.ActivateFirstBinding();
                    }
                }
            }
コード例 #2
0
        /// <summary>
        /// Invoked when an entry in <see cref="Bindings"/> completes.
        /// </summary>
        /// <param name="entry">The entry that completed.</param>
        public void Completed(PriorityBindingEntry entry)
        {
            Bindings.Remove(entry);

            if (entry.Index >= ActiveBindingIndex)
            {
                ActivateFirstBinding();
            }
        }
コード例 #3
0
        /// <summary>
        /// Adds a binding.
        /// </summary>
        /// <param name="binding">The binding to add.</param>
        /// <returns>A disposable used to remove the binding.</returns>
        public IDisposable Add(IObservable <object> binding)
        {
            Contract.Requires <ArgumentNullException>(binding != null);

            var entry = new PriorityBindingEntry(this, _nextIndex++);
            var node  = Bindings.AddFirst(entry);

            entry.Start(binding);

            return(new RemoveBindingDisposable(node, Bindings, this));
        }
コード例 #4
0
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> changes value.
 /// </summary>
 /// <param name="entry">The entry that changed.</param>
 public void Changed(PriorityBindingEntry entry)
 {
     if (entry.Index >= ActiveBindingIndex)
     {
         if (entry.Value != AvaloniaProperty.UnsetValue)
         {
             Value = entry.Value;
             ActiveBindingIndex = entry.Index;
             Owner.LevelValueChanged(this);
         }
         else
         {
             ActivateFirstBinding();
         }
     }
 }
コード例 #5
0
ファイル: PriorityLevel.cs プロジェクト: zheng1748/Avalonia
            public void Dispose()
            {
                PriorityBindingEntry entry = _binding.Value;

                if (!entry.HasCompleted)
                {
                    _bindings.Remove(_binding);

                    entry.Dispose();

                    if (entry.Index >= _priorityLevel.ActiveBindingIndex)
                    {
                        _priorityLevel.ActivateFirstBinding();
                    }
                }
            }
コード例 #6
0
        /// <summary>
        /// Adds a binding.
        /// </summary>
        /// <param name="binding">The binding to add.</param>
        /// <returns>A disposable used to remove the binding.</returns>
        public IDisposable Add(IObservable <object> binding)
        {
            Contract.Requires <ArgumentNullException>(binding != null);

            var entry = new PriorityBindingEntry(this, _nextIndex++);
            var node  = Bindings.AddFirst(entry);

            entry.Start(binding);

            return(Disposable.Create(() =>
            {
                Bindings.Remove(node);
                entry.Dispose();

                if (entry.Index >= ActiveBindingIndex)
                {
                    ActivateFirstBinding();
                }
            }));
        }
コード例 #7
0
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> encounters a recoverable error.
 /// </summary>
 /// <param name="entry">The entry that completed.</param>
 /// <param name="error">The error.</param>
 public void Error(PriorityBindingEntry entry, BindingNotification error)
 {
     Owner.LevelError(this, error);
 }
コード例 #8
0
ファイル: PriorityLevel.cs プロジェクト: CarlSosaDev/Avalonia
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> reports validation status.
 /// </summary>
 /// <param name="entry">The entry that completed.</param>
 /// <param name="validationStatus">The validation status.</param>
 public void Validation(PriorityBindingEntry entry, IValidationStatus validationStatus)
 {
     _owner.LevelValidation(this, validationStatus);
 }
コード例 #9
0
ファイル: PriorityLevel.cs プロジェクト: CarlSosaDev/Avalonia
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> encounters a recoverable error.
 /// </summary>
 /// <param name="entry">The entry that completed.</param>
 /// <param name="error">The error.</param>
 public void Error(PriorityBindingEntry entry, BindingError error)
 {
     _owner.LevelError(this, error);
 }
コード例 #10
0
ファイル: PriorityLevel.cs プロジェクト: CarlSosaDev/Avalonia
        /// <summary>
        /// Invoked when an entry in <see cref="Bindings"/> completes.
        /// </summary>
        /// <param name="entry">The entry that completed.</param>
        public void Completed(PriorityBindingEntry entry)
        {
            Bindings.Remove(entry);

            if (entry.Index >= ActiveBindingIndex)
            {
                ActivateFirstBinding();
            }
        }
コード例 #11
0
ファイル: PriorityLevel.cs プロジェクト: CarlSosaDev/Avalonia
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> changes value.
 /// </summary>
 /// <param name="entry">The entry that changed.</param>
 public void Changed(PriorityBindingEntry entry)
 {
     if (entry.Index >= ActiveBindingIndex)
     {
         if (entry.Value != AvaloniaProperty.UnsetValue)
         {
             Value = entry.Value;
             ActiveBindingIndex = entry.Index;
             _owner.LevelValueChanged(this);
         }
         else
         {
             ActivateFirstBinding();
         }
     }
 }
コード例 #12
0
ファイル: PriorityLevel.cs プロジェクト: CarlSosaDev/Avalonia
        /// <summary>
        /// Adds a binding.
        /// </summary>
        /// <param name="binding">The binding to add.</param>
        /// <returns>A disposable used to remove the binding.</returns>
        public IDisposable Add(IObservable<object> binding)
        {
            Contract.Requires<ArgumentNullException>(binding != null);

            var entry = new PriorityBindingEntry(this, _nextIndex++);
            var node = Bindings.AddFirst(entry);

            entry.Start(binding);

            return Disposable.Create(() =>
            {
                Bindings.Remove(node);
                entry.Dispose();

                if (entry.Index >= ActiveBindingIndex)
                {
                    ActivateFirstBinding();
                }
            });
        }
コード例 #13
0
ファイル: PriorityLevel.cs プロジェクト: sqdavid/Avalonia
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> reports validation status.
 /// </summary>
 /// <param name="entry">The entry that completed.</param>
 /// <param name="validationStatus">The validation status.</param>
 public void Validation(PriorityBindingEntry entry, IValidationStatus validationStatus)
 {
     _owner.LevelValidation(this, validationStatus);
 }
コード例 #14
0
ファイル: PriorityLevel.cs プロジェクト: sqdavid/Avalonia
 /// <summary>
 /// Invoked when an entry in <see cref="Bindings"/> encounters a recoverable error.
 /// </summary>
 /// <param name="entry">The entry that completed.</param>
 /// <param name="error">The error.</param>
 public void Error(PriorityBindingEntry entry, BindingError error)
 {
     _owner.LevelError(this, error);
 }