Silverlight 4: проблемы с преобразователями значений - PullRequest
0 голосов
/ 12 сентября 2010

Я пытаюсь использовать конвертер значений.Однако VS жалуется на этот XAML:

<Grid x:Name="LayoutRoot" Background="White" Height="Auto" Width="Auto">

    <Grid.Resources>
        <local:DateFormatter x:Key="FormatConverter" />
    </Grid.Resources>

Ошибка:

The type 'local:DateFormatter' was not found. Verify that you are not missing an assembly reference and that all referenced assemblies have been built.

Я пропустил ссылку на сборку или мой XAML неверен?Я пытаюсь следовать примеру на MSDN .

Обновление : я добавил следующий атрибут в UserControl:

xmlns:local="clr-namespace:MyNamespace"

Я также добавил класс DateFormatter.

Теперь Intellisense появляется с «local» и «DateFormatter».Тем не менее, он по-прежнему выдает ту же ошибку, что и выше.Ошибка не возникает для других типов, таких как App.

DateFormatter:

using System;
...

namespace MyNamespace
{
    public class DateFormatter : IValueConverter
    {

        #region IValueConverter Members

        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DateTime date = (DateTime) value;
            return date.ToShortDateString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }

        #endregion
    }
}

Ответы [ 2 ]

3 голосов
/ 12 сентября 2010

Как говорит Майкл С. Шероттер, вам нужно добавить ссылку на пространство имен в XAML.

Если вы читаете статью MSDN, вам необходимо указать следующее:

xmlns:local="clr-namespace:YOUR-NAMESPACE-HERE"

Это похоже на оператор using в C #. Он сообщает XAML, где найти ваш тип DateFormatter.


Обновление:

Я не уверен, что для тебя не так.

Мне подходит следующее (применяя ваш код DateFormatter, но в другом пространстве имен):

MainPage.xaml

<UserControl x:Class="SilverlightApplication2.MainPage"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
    xmlns:local="clr-namespace:SilverlightApplication2">

    <Grid x:Name="LayoutRoot" Background="White">
        <Grid.Resources>
            <local:DateFormatter x:Key="FormatConverter" />
        </Grid.Resources>

        <TextBlock HorizontalAlignment="Stretch" VerticalAlignment="Stretch"
                   Text="{Binding FooDate, Converter={StaticResource FormatConverter}}"/>
    </Grid>
</UserControl>

MainPage.xaml.cs

используя Систему; использование System.Windows.Controls;

namespace SilverlightApplication2
{
    public partial class MainPage : UserControl
    {
        public MainPage()
        {
            InitializeComponent();

            var foo = new Foo { FooDate = DateTime.Now };
            DataContext = foo;
        }
    }

    public class Foo
    {
        public DateTime FooDate { get; set; }
    }
}

DateFormmatter.cs

using System;
using System.Windows.Data;

namespace SilverlightApplication2
{
    public class DateFormatter : IValueConverter
    {
        public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            DateTime date = (DateTime)value;
            return date.ToShortDateString();
        }

        public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
        {
            throw new NotImplementedException();
        }
    }
}
3 голосов
/ 12 сентября 2010

Да - вам нужно добавить xmlns: local = "clr-namespace: SilverlightApplication6", чтобы сопоставить пространство имен и сборку с локальным пространством имен XAML. Если вы добавите конвертер с помощью Expression Blend, он поместит правильное объявление пространства имен.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...