[英]Translating MVVM WPF C# code to vb.net
作为wpf和MVVM的新手,我花了很短的时间就偶然发现了对话框结果的小问题(或者缺少它)。 幸运的是,SO中关于该主题的问题数量至少使我感到我并不孤单。
说完看了无数的答案,似乎最类似于MVVM的原则(至少在我的新的和相对非熟练眼)的一个是由乔·怀特给出这里 。
到目前为止,一切都很好,直到涉及将其转换为VB的小事。
我最终得出的结论是:
Imports System.windows
Public NotInheritable Class DialogCloser
Private Sub New()
End Sub
Public Shared ReadOnly DialogResultProperty As DependencyProperty = DependencyProperty.RegisterAttached("DialogResult", GetType(System.Nullable(Of Boolean)), GetType(DialogCloser), New PropertyMetadata(DialogResultChanged))
Private Shared Sub DialogResultChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim window = TryCast(d, Window)
If window IsNot Nothing Then
window.DialogResult = TryCast(e.NewValue, System.Nullable(Of Boolean))
End If
End Sub
Public Shared Sub SetDialogResult(target As Window, value As System.Nullable(Of Boolean))
target.SetValue(DialogResultProperty, value)
End Sub
End Class
这给了我两个具体的错误
当我再次查看Joe发布的原始代码时,似乎没有为'd'传递任何参数,并且trycast与已转换为的参数几乎相同。 那么为什么在转换为VB时会抛出错误呢?
多谢您就此事提供的宝贵意见,以及可能需要纠正的任何建议。
这将起作用:
Public Shared ReadOnly DialogResultProperty As DependencyProperty = DependencyProperty.RegisterAttached(
"DialogResult",
GetType(System.Nullable(Of Boolean)),
GetType(DialogCloser),
New PropertyMetadata(New PropertyChangedCallback(AddressOf DialogResultChanged)))
Private Shared Sub DialogResultChanged(d As DependencyObject, e As DependencyPropertyChangedEventArgs)
Dim window = TryCast(d, Window)
If window IsNot Nothing Then
window.DialogResult = DirectCast(e.NewValue, Nullable(Of Boolean))
End If
End Sub
您的代码中的问题是(据我了解,我不是VB专家):
在VB中没有从C#“方法组”中的任何隐式转换来进行委派,因此您必须使用AddressOf运算符
C#中的“ as”不会直接转换为VB中的TryCast,因为“ as”显式支持可空类型。 在这种情况下,DirectCast是一个安全的选择,因为您要负责传递的参数。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.