Skip to content
体验新版
项目
组织
正在加载...
登录
切换导航
打开侧边栏
lindexi_gd
Uno
提交
ade95d87
U
Uno
项目概览
lindexi_gd
/
Uno
11 个月 前同步成功
通知
1
Star
0
Fork
0
代码
文件
提交
分支
Tags
贡献者
分支图
Diff
Issue
0
列表
看板
标记
里程碑
合并请求
0
DevOps
流水线
流水线任务
计划
Wiki
0
Wiki
分析
仓库
DevOps
项目成员
Pages
U
Uno
项目概览
项目概览
详情
发布
仓库
仓库
文件
提交
分支
标签
贡献者
分支图
比较
Issue
0
Issue
0
列表
看板
标记
里程碑
合并请求
0
合并请求
0
Pages
DevOps
DevOps
流水线
流水线任务
计划
分析
分析
仓库分析
DevOps
Wiki
0
Wiki
成员
成员
收起侧边栏
关闭侧边栏
动态
分支图
创建新Issue
流水线任务
提交
Issue看板
体验新版 GitCode,发现更多精彩内容 >>
提交
ade95d87
编写于
5月 02, 2023
作者:
M
Martin Zikmund
浏览文件
操作
浏览文件
下载
电子邮件补丁
差异文件
fix: Do not throw for already disposed callbacks
上级
e59686fa
变更
2
隐藏空白更改
内联
并排
Showing
2 changed file
with
60 addition
and
8 deletion
+60
-8
src/Uno.UI.Tests/DependencyProperty/Given_DependencyProperty.cs
...o.UI.Tests/DependencyProperty/Given_DependencyProperty.cs
+58
-6
src/Uno.UI/UI/Xaml/DependencyObjectStore.cs
src/Uno.UI/UI/Xaml/DependencyObjectStore.cs
+2
-2
未找到文件。
src/Uno.UI.Tests/DependencyProperty/Given_DependencyProperty.cs
浏览文件 @
ade95d87
...
...
@@ -1389,7 +1389,7 @@ namespace Uno.UI.Tests.BinderTests
void
OnBrushChanged
(
ManagedWeakReference
instance
,
DependencyProperty
property
,
DependencyPropertyChangedEventArgs
args
)
{
disposable2
=
brush
.
RegisterDisposablePropertyChangedCallback
(
OnInnerCallbackBrushChanged
);
disposable2
=
brush
.
RegisterDisposablePropertyChangedCallback
(
OnInner
Add
CallbackBrushChanged
);
}
brush
.
Color
=
Colors
.
Red
;
...
...
@@ -1398,11 +1398,36 @@ namespace Uno.UI.Tests.BinderTests
disposable2
?.
Dispose
();
}
private
void
OnInnerCallbackBrushChanged
(
ManagedWeakReference
instance
,
DependencyProperty
property
,
DependencyPropertyChangedEventArgs
args
)
private
void
OnInner
Add
CallbackBrushChanged
(
ManagedWeakReference
instance
,
DependencyProperty
property
,
DependencyPropertyChangedEventArgs
args
)
{
Assert
.
Fail
();
}
[
TestMethod
]
public
void
When_RemoveCallback_OnPropertyChanged
()
{
var
brush
=
new
SolidColorBrush
();
IDisposable
disposable
=
null
;
IDisposable
disposable2
=
null
;
disposable
=
brush
.
RegisterDisposablePropertyChangedCallback
(
OnBrushChanged
);
disposable2
=
brush
.
RegisterDisposablePropertyChangedCallback
(
OnInnerRemoveCallbackBrushChanged
);
void
OnBrushChanged
(
ManagedWeakReference
instance
,
DependencyProperty
property
,
DependencyPropertyChangedEventArgs
args
)
{
disposable2
.
Dispose
();
}
Action
act
=
()
=>
brush
.
Color
=
Colors
.
Red
;
act
.
Should
().
NotThrow
();
disposable
?.
Dispose
();
disposable2
?.
Dispose
();
}
private
void
OnInnerRemoveCallbackBrushChanged
(
ManagedWeakReference
instance
,
DependencyProperty
property
,
DependencyPropertyChangedEventArgs
args
)
{
}
[
TestMethod
]
public
void
When_AddParentChanged_OnParentChanged
()
{
...
...
@@ -1410,13 +1435,13 @@ namespace Uno.UI.Tests.BinderTests
var
secondParent
=
new
Windows
.
UI
.
Xaml
.
Controls
.
Border
();
var
border
=
new
Windows
.
UI
.
Xaml
.
Controls
.
Border
();
firstParent
.
Child
=
border
;
IDisposable
disposable
=
null
;
IDisposable
disposable2
=
null
;
border
.
RegisterParentChangedCallback
(
1
,
OnParentChangedCallback
);
disposable
=
border
.
RegisterParentChangedCallback
(
1
,
OnParentChangedCallback
);
void
OnParentChangedCallback
(
object
instance
,
object
key
,
DependencyObjectParentChangedEventArgs
args
)
{
border
.
RegisterParentChangedCallback
(
2
,
OnInner
ParentChangedCallback
);
disposable2
=
border
.
RegisterParentChangedCallback
(
2
,
OnInnerAdd
ParentChangedCallback
);
}
firstParent
.
Child
=
null
;
...
...
@@ -1425,11 +1450,38 @@ namespace Uno.UI.Tests.BinderTests
disposable2
?.
Dispose
();
}
private
void
OnInnerParentChangedCallback
(
object
instance
,
object
key
,
DependencyObjectParentChangedEventArgs
args
)
private
void
OnInner
Add
ParentChangedCallback
(
object
instance
,
object
key
,
DependencyObjectParentChangedEventArgs
args
)
{
Assert
.
Fail
();
}
[
TestMethod
]
public
void
When_RemoveParentChanged_OnParentChanged
()
{
var
firstParent
=
new
Windows
.
UI
.
Xaml
.
Controls
.
Border
();
var
secondParent
=
new
Windows
.
UI
.
Xaml
.
Controls
.
Border
();
var
border
=
new
Windows
.
UI
.
Xaml
.
Controls
.
Border
();
firstParent
.
Child
=
border
;
IDisposable
disposable
=
null
;
IDisposable
disposable2
=
null
;
disposable
=
border
.
RegisterParentChangedCallback
(
1
,
OnParentChangedCallback
);
disposable2
=
border
.
RegisterParentChangedCallback
(
2
,
OnInnerAddParentChangedCallback
);
void
OnParentChangedCallback
(
object
instance
,
object
key
,
DependencyObjectParentChangedEventArgs
args
)
{
disposable2
.
Dispose
();
}
Action
act
=
()
=>
firstParent
.
Child
=
null
;
act
.
Should
().
NotThrow
();
disposable
?.
Dispose
();
disposable2
?.
Dispose
();
}
private
void
OnInnerRemoveParentChangedCallback
(
object
instance
,
object
key
,
DependencyObjectParentChangedEventArgs
args
)
{
}
[
TestMethod
]
public
void
When_NullablePropertyBinding
()
{
...
...
src/Uno.UI/UI/Xaml/DependencyObjectStore.cs
浏览文件 @
ade95d87
...
...
@@ -993,7 +993,7 @@ namespace Windows.UI.Xaml
var
weakCallbackRef
=
WeakReferencePool
.
RentWeakReference
(
this
,
callback
);
ParentChangedCallback
weakCallback
=
(
s
,
_
,
e
)
=>
(
weakCallbackRef
.
Target
as
ParentChangedCallback
)?.
Invoke
(
s
,
key
,
e
);
(
s
,
_
,
e
)
=>
(
!
weakCallbackRef
.
IsDisposed
?
weakCallbackRef
.
Target
as
ParentChangedCallback
:
null
)?.
Invoke
(
s
,
key
,
e
);
_parentChangedCallbacks
=
_parentChangedCallbacks
.
Add
(
weakCallback
);
...
...
@@ -1761,7 +1761,7 @@ namespace Windows.UI.Xaml
var
wr
=
WeakReferencePool
.
RentWeakReference
(
null
,
callback
);
weakDelegate
=
(
instance
,
s
,
e
)
=>
(
wr
.
Target
as
ExplicitPropertyChangedCallback
)?.
Invoke
(
instance
,
s
,
e
);
(
instance
,
s
,
e
)
=>
(
!
wr
.
IsDisposed
?
wr
.
Target
as
ExplicitPropertyChangedCallback
:
null
)?.
Invoke
(
instance
,
s
,
e
);
weakRelease
=
new
WeakReferenceReturnDisposable
(
wr
);
}
...
...
编辑
预览
Markdown
is supported
0%
请重试
或
添加新附件
.
添加附件
取消
You are about to add
0
people
to the discussion. Proceed with caution.
先完成此消息的编辑!
取消
想要评论请
注册
或
登录