2014-09-03 2 views
0

Я создал пользовательский элемент управления CustomTextBox, унаследованный от класса TextBox. Я создал свойство зависимостей с именем CustomTextProperty.Зависимость настройки пользовательского контроля WPF.

Я связал этот DP с моим свойством Viewmodel.

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

Когда я пытаюсь настроить свой контроль из вида, связанный с ним набор свойств VM не вызывается, а свойствоchangecallback не запускается.

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

Код snipet ниже:

Мой заказ управления

class CustomTextBox : TextBox 
{ 
    public static readonly DependencyProperty CustomTextProperty = DependencyProperty.Register("CustomText", 
                   typeof(string), typeof(CustomTextBox), 
                   new FrameworkPropertyMetadata("CustomTextBox", 
                   FrameworkPropertyMetadataOptions.BindsTwoWayByDefault, 
                   new PropertyChangedCallback(OnCustomPropertyChange))); 

public string CustomText 
{ 
    get { return (string)GetValue(CustomTextProperty); } 
    set { SetValue(CustomTextProperty, value); } 
} 

private static void OnCustomPropertyChange(DependencyObject d, DependencyPropertyChangedEventArgs e) 
{ 
    // This is Demo Application. 
    // Code to be done Later... 
} 
} 

My View Model:

public class ViewModel : INotifyPropertyChanged 
{ 
private string textForTextBox; 

public string TextForCustomTextBox 
{ 
    get 
    { 
    return this.textForTextBox; 
    } 
    set 
    { 
    this.textForTextBox = value; 

    this.OnPropertyChange("TextForCustomTextBox"); 
    } 
} 

public event PropertyChangedEventHandler PropertyChanged; 

public void OnPropertyChange(string name) 
{ 
    PropertyChangedEventHandler handler = PropertyChanged; 

    if (handler != null) 
    { 
    handler(this, new PropertyChangedEventArgs(name)); 
    } 
} 
} 

Мой Xaml код с Переплет:

<custom:CustomTextBox x:Name="CustomTextBox" 
            CustomText="{Binding TextForCustomTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
            Grid.Row="1" HorizontalAlignment="Center" Width="200" Height="50" /> 

Мой код Behind к установить DataContext:

// My View Constructor 
public View1() 
{ 
    InitializeComponent(); 

    this.DataContext = new ViewModel(); 
} 
+0

Почтовый код, как вы устанавливаете его из кода? –

+0

Где код, задающий 'DataContext'? Вы установили «DataContext» где-нибудь в XAML или в коде? Все, что вы опубликовали, похоже, что это сработает. –

+0

Спасибо за ответ ... я отредактировал код выше, показывая, что datacontext будет установлен в экземпляр класса ViewModel. – Deepanshu

ответ

1

Вы сказали, что вы объявили CustomText DependencyProperty данные и обвили его к вашей модели представления TextForCustomTextBox собственности и многое правильно. Однако, когда вы сказали, что пытались установить свою собственность с точки зрения, вы ошиблись.

То, что вы были на самом деле делать садились на CustomTextBox .Text имуществе от точки зрения и что не было подключено к CustomTextBox.CustomText собственности. Вы можете соединить их, как это, хотя я не совсем уверен, что точка, которая будет:

<Views:CustomTextBox x:Name="CustomTextBox" Text="{Binding CustomText, RelativeSource={ 
    RelativeSource Self}, UpdateSourceTrigger=PropertyChanged}" CustomText="{Binding 
    TextForCustomTextBox, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" 
    Grid.Row="1" HorizontalAlignment="Center" Width="200" Height="50" /> 
+0

Спасибо, Шеридан ... ваше предоставленное решение заставило его работать. На самом деле нет смысла делать это, но я изучаю WPF и хочу узнать каждый из этой технологии и из нее. Можете ли вы предложить мне хорошую документацию или справочник по изучению WPF. – Deepanshu

0

Попробуйте настроить DataContext до фактической инициализации, так он доступен, когда создаются объекты формы/управления. Если он не может найти раньше, это то, что может быть причиной неудачных привязок.

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