2015-04-28 5 views
0

В настоящее время, реализуя пользовательский элемент управления, я хотел бы привязать некоторое значение непосредственно из моей модели просмотра без использования xaml. я могу это сделать:Пользовательский контроль DataBinding wpf

<customControls:MyControl MyValue="{Binding ElementName=MyElem, Path=Text}"> 
<Textbox Text="{Binding Mytext}" /> 

Но нет:

<customControls:MyControl MyValue="{Binding MyText}"> 

Элементы управления определяется в шаблоне и внутри кода управления мой MyProperty определяется как:

public static readonly DependencyProperty MyValueProperty = DependencyProperty.Register("MyValue", typeof(double), typeof(CustomOEE), new FrameworkPropertyMetadata((Double)20,FrameworkPropertyMetadataOptions.BindsTwoWayByDefault)); 
    public double MyValue 
    { 
     get 
     { 
      return (double)GetValue(MyValueProperty); 
     } 
     set 
     { 
      SetValue(MyValueProperty, value); 

     } 
    } 

Спасибо много за вашу помощь

+1

Вы связывающим текст свойству типа двойного и с указанием двух- . С помощью ToString() произойдет двойная строка, но вы не сможете автоматически конвертировать назад. У этого сообщения есть некоторые подробности по конверсии: http://stackoverflow.com/questions/17178738/wpf-string-to-double-converter –

ответ

0

В качестве общего ответа в рамках UserControl вы связываете j ust к UserControl DependencyProperties, и вы делаете это с привязкой ElementName или RelativeSource, и вы должны никогда установить DataContext в UserControl.

public static readonly DependencyProperty MyOwnDPIDeclaredInMyUcProperty = 
    DependencyProperty.Register("MyOwnDPIDeclaredInMyUc", 
     typeof(string), typeof(MyUserControl)); 

public string MyOwnDPIDeclaredInMyUc 
{ 
    get 
    { 
     return (string)GetValue(MyOwnDPIDeclaredInMyUcProperty); 
    } 
    set 
    { 
     SetValue(MyOwnDPIDeclaredInMyUcProperty, value); 

    } 
} 

XAML

<UserControl x:Name="myRealUC" x:class="MyUserControl"> 
    <TextBox Text="{Binding ElementName=myRealUC, Path=MyOwnDPIDeclaredInMyUc, Mode=TwoWay}"/> 
<UserControl> 

Если вы делаете, что вы можете легко использовать этот UserControl в любом виде, как:

<myControls:MyUserControl MyOwnDPIDeclaredInMyUc="{Binding MyPropertyInMyViewmodel}"/> 
+0

Большое спасибо. Предоставление моего контроля наследуется от UserControl и Not Control и изменение привязки все решает. – user4841455

+1

если ваша проблема решена PLS отметить ответ;) – blindmeis

+0

Хорошо, я сделаю это :-). Но у меня есть больше вопросов о PLS: что такое xaml, чтобы использовать шаблон стиля в ressource dictionnary для этого элемента управления? – user4841455

Смежные вопросы