Как связать свойство из моего элемента управления контентом usercontrol со свойством в моей модели представления? - PullRequest
0 голосов
/ 31 октября 2011

У меня есть такой пользовательский контроль:

<UserControl x:Class="MySample.customtextbox"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
         xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
         mc:Ignorable="d" 
         d:DesignHeight="20" d:DesignWidth="300">
    <Grid>
           <TextBox x:Name="Ytextbox"  Background="Yellow"/> 
    </Grid>
</UserControl>

Я хочу использовать этот элемент управления в представлении, таком как MainWindowView Как я могу привязать свое текстовое свойство Ytextbox к свойству в моем MainWindowViewModel?

<CT:customtextbox  Text="{binding  mypropertyinviewmodel}"/>

Я знаю, что должен определить DependencyProperty для своего элемента управления, пока не смогу привязать к нему свойство в моей модели представления, поэтому я определяю свойство зависимости для своего элемента управления следующим образом:

public static readonly DependencyProperty InfoTextProperty = 
        DependencyProperty.Register("InfoText", typeof(string), typeof(customtextbox), new FrameworkPropertyMetadata(false));

public string InfoText
{
    get { return (string)GetValue(InfoTextProperty);}
    set
    {
        SetValue(InfoTextProperty, value); 
    }
} 

Когда я определяю свойство зависимости для своего элемента управления, у меня появляется ошибка xaml:

Ошибка 1 Не удается создать экземпляр «customtextbox».

Ответы [ 3 ]

2 голосов
/ 31 октября 2011
new FrameworkPropertyMetadata(false)

Нельзя установить значение по умолчанию для свойства string на false (что, конечно, bool).

Могут быть и другие проблемы (например, у вас нет привязки к TextBox в объявлении пользовательского coontrol, и вы пытаетесь установить свойство, которое вы не зарегистрировали, где вы создаете экземпляр), но для тех, кому вы должны искать SO.

1 голос
/ 31 октября 2011

Вы пытаетесь установить логическое значение для строки DependencyProperty. Должно быть что-то подобное

 new FrameworkPropertyMetadata(string.Empty)

или

new FrameworkPropertyMetadata(null)
0 голосов
/ 31 октября 2011

Умм попробуйте это как код для вашего свойства зависимости.

public static readonly DependencyProperty InfoTextProperty = 
    DependencyProperty.Register(
        "InfoText",
        typeof(string),
        typeof(customtextbox)
    );

    public string InfoText
    {

        get { return (string)GetValue(InfoTextProperty);}
        set {SetValue(InfoTextProperty, value); }
    } 

Я только что удалил последний параметр, когда вы регистрировали свойство, я думаю, что он должен предоставить значение по умолчанию для свойства, и выобеспечивали логическое значение вместо строки, в любом случае это необязательный параметр.

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