Пользовательский элемент управления WPF с Unity, который не удается разрешить - PullRequest
2 голосов
/ 03 сентября 2010
public class RichTextBoxExtended : RichTextBox
{
    static RichTextBoxExtended()
    {
        //DefaultStyleKeyProperty.OverrideMetadata(typeof(RichTextBoxExtended), new FrameworkPropertyMetadata(typeof(RichTextBoxExtended)));
    }

    public byte[] Text
    {
        get { return (byte[])GetValue(TextProperty); }
        set { SetValue(TextProperty, value); }
    }

    // Using a DependencyProperty as the backing store for Text.  This enables animation, styling, binding, etc...
    public static readonly DependencyProperty TextProperty =
        DependencyProperty.Register("Text", typeof(byte[]), typeof(RichTextBoxExtended), new UIPropertyMetadata(null, new PropertyChangedCallback(TextChangedCallback)));

    private static void TextChangedCallback(DependencyObject obj, DependencyPropertyChangedEventArgs e)
    {
        RichTextBoxExtended richTextBoxExtended = obj as RichTextBoxExtended;
        richTextBoxExtended.ChangeText(e);
    }

    private void ChangeText(DependencyPropertyChangedEventArgs e)
    {
        //clear out any formatting properties
        TextRange range = new TextRange(base.Document.ContentStart, base.Document.ContentEnd);
        range.ClearAllProperties();

        //load bytes into stream, load stream into range
        MemoryStream stream = new MemoryStream(e.NewValue as byte[]);
        range.Load(stream, DataFormats.Rtf);
    }
}

Выше находится пользовательский элемент управления ...

XAML, реализующий пользовательский элемент управления ...

<Grid>
    <controls:RichTextBoxExtended x:Name="Document" Text="{Binding Path=File}">
    </controls:RichTextBoxExtended>
</Grid>

Связанная ВМ ...

public class FileViewerViewModel : AViewModel
{
    private byte[] _file = null;

    public FileViewerViewModel(ILoggerFacade logger)
    {

    }

    /// <summary>
    /// Gets or sets the <seealso cref="DataFormats.Rtf"/> file representation as a <seealso cref="byte[]"/>
    /// </summary>
    public byte[] File
    {
        get 
        {
            return _file;
        }
        set 
        {
            _file = value;
            RaiseChanged(() => this.File);
        }
    }
}

Наконец ... если я позвоню ...

FileViewerView view = _container.Resolve<FileViewerView>();

Не удается.

Resolution of the dependency failed, type = "cyos.infrastructure.Views.FileViewerView", name = "". Exception message is: The current build operation (build key Build Key[cyos.infrastructure.Views.FileViewerView, null]) failed: Object reference not set to an instance of an object. (Strategy type BuildPlanStrategy, index 3)

Если я удалю привязку из XAML ...

<Grid> 
    <controls:RichTextBoxExtended x:Name="Document">
    </controls:RichTextBoxExtended>
</Grid>

Все работает без проблем ... вообще никаких проблем ... идеи?

EDIT:

Перешел к созданию нового экземпляра, минуя Unity.Проблема по-прежнему в том же месте, исключение при создании FileViewerView в InitializeComponent () с «Ссылка на объект не установлена ​​для экземпляра объекта.»

в System.Windows.Markup.BamlRecordReader.ProvideValueFromMarkupExtension (MarkupExtension markupExtension MarkupExtension markupExtension), Объект obj, Член объекта) в System.Windows.Markup.BamlRecordReader.ReadPropertyArrayEndRecord () в System.Windows.Markup.BamlRecordReader.ReadRecord (BamlRecord bamlRecord) в System.Windows.Markup.BamlRecordRean.Windows.Markup.TreeBuilderBamlTranslator.ParseFragment () в System.Windows.Markup.TreeBuilder.Parse () в System.Windows.Markup.XamlReader.LoadBaml (потоковый поток, ParserContext parserContext, родительский объект, логический объект Закрыть окно)..LoadComponent (объектный компонент, Uri resourceLocator) в cyos.infrastructure.Views.FileViewerView.InitializeComponent () в c: \ Documents and Settings \ amciver \ Мои документы \ dev \ cyos \ cyos \ cyos.infrastructure \ Views \ FileViewerView.xaml: строка 1 в cyos.infrastructure.Views.FileViewerView..ctor (FileViewerViewModel viewModel) сейчас ...

1 Ответ

1 голос
/ 03 сентября 2010

Я не знаю, в чем проблема с массивом, но List работает.

...