繁体   English   中英

将MVVM WPF C#代码转换为vb.net

[英]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

这给了我两个具体的错误

  1. 未为私有共享子DilogResultChanged的参数d指定参数
  2. TryCast操作数必须是引用类型,但是是布尔值? 是值类型

当我再次查看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专家):

  1. 在VB中没有从C#“方法组”中的任何隐式转换来进行委派,因此您必须使用AddressOf运算符

  2. C#中的“ as”不会直接转换为VB中的TryCast,因为“ as”显式支持可空类型。 在这种情况下,DirectCast是一个安全的选择,因为您要负责传递的参数。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM