Имя "YesNo" не существует в пространстве имен "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter"

Я пытаюсь выучить WPF из Wpf Tuturial

У меня проблемы с конвертированием в WPF и VB.Net. Я использую VS 2012

Вот мой код XML

<Window x:Class="Binding_Sample_Converter"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="clr-Namespace:WPF_Tutorial.WPFTutorials.Converter"  
Title="Binding_Sample_Converter" Height="300" Width="300">
<Window.Resources>
    <!--
    Error   1   The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
    Error   2   The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
    Error   3   The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

    -->
    <local:YesNo x:Key="YesNo" />
</Window.Resources>
<Grid>

</Grid>

Вот мой код VB.Net

Imports System.Windows
Imports System.ComponentModel
Imports System.Windows.Data
Namespace WPFTutorials.Converter
    Public Class Binding_Sample_Converter
        Public Class YesNo
        Implements IValueConverter

        Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
            Select Case value.ToString.ToLower
                Case "yes"
                    Return True
                Case "no"
                    Return False
            End Select
            Return False
        End Function

        Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
            If TypeOf value Is Boolean Then
                If CBool(value) = True Then : Return "yes"
                Else : Return "no"
                End If
            Else : Return "no"
            End If
        End Function
    End Class
End Class
End Namespace

Я пытаюсь преобразовать код C# из указанного учебника веб-сайта в VB.Net

Ошибка

        Error   1   The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
    Error   2   The name "YesNo" does not exist in the namespace "clr-Namespace:WPF_Tutorial.WPFTutorials.Converter".
    Error   3   The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

Пожалуйста помоги

заранее спасибо

Амит Сараф

Редактировать. Err. & Предупреждение после модификации

        <!--
    Warning 1   Namespace or type specified in the Imports 'WPFTutorials.Converter' doesn't contain any public member or cannot be found. Make sure the namespace or the type is defined and contains at least one public member. Make sure the imported element name doesn't use any aliases.  D:\Data - 2012\WPF\WPF_Tutotrial\obj\Debug\Binding_Sample_Converter.g.i.vb  35  9   WPF_Tutotrial
    Error   2   The name "YesNo" does not exist in the namespace "clr-namespace:WPFTutorials.Converter".    D:\Data - 2012\WPF\WPF_Tutotrial\Binding_Sample_Converter.xaml  11  9   WPF_Tutotrial
    Error   3   The type 'local:YesNo' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built. D:\Data - 2012\WPF\WPF_Tutotrial\Binding_Sample_Converter.xaml  12  10  WPF_Tutotrial
    -->

1 ответ

Решение

В вашем коде есть две проблемы.

Во-первых, имя пространства имен чувствительно к регистру. N должно быть в нижнем регистре. Синтаксис для объявления пространства имен clr-namespace,

Во-вторых, YesNo класс во вложенном классе Binding_Sample_Converter чего не должно быть. Вы can't create an instance of nested class in XAML, Из MSDN:

Чтобы иметь возможность создания экземпляра в качестве элемента объекта, ваш класс должен соответствовать следующим требованиям:

  1. Ваш пользовательский класс должен быть общедоступным и поддерживать общедоступный конструктор по умолчанию (без параметров).

  2. Ваш пользовательский класс не должен быть вложенным. Вложенные классы и "точка" в их общем синтаксисе использования CLR мешают другим функциям WPF и / или XAML, таким как присоединенные свойства.

XAML:

xmlns:local="clr-namespace:WPFTutorials.Converter"

Конвертер:

Переехать YesNo класс вне класса Public Class Binding_Sample_Converter и объявить его прямо под пространством имен.

Namespace WPFTutorials.Converter
   Public Class Binding_Sample_Converter
   End Class

Public Class YesNo
    Implements IValueConverter

    Public Function Convert(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.Convert
        Select Case value.ToString.ToLower
            Case "yes"
                Return True
            Case "no"
                Return False
        End Select
        Return False
    End Function

    Public Function ConvertBack(value As Object, targetType As Type, parameter As Object, culture As Globalization.CultureInfo) As Object Implements IValueConverter.ConvertBack
        If TypeOf value Is Boolean Then
            If CBool(value) = True Then : Return "yes"
            Else : Return "no"
            End If
        Else : Return "no"
        End If
    End Function
  End Class
End Namespace
Другие вопросы по тегам