2016-04-04 3 views
2

У меня есть приложение Silverlight/WPF, которое я улучшаю. У меня есть UserControl, и ему необходимо отключить или включить некоторые элементы управления при изменении свойства на модели. Он должен сделать некоторую другую логику, поэтому я не могу просто привязать их к свойству.UserControl привязывается к свойству Model

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

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

Пример того, что я пытаюсь сделать:

public partial class MyControl : UserControl 
{ 
    private readonly MyModel _model; 

    public MyControl(MyModel model) 
    { 
     _model = model; 
     // bind to model's ImportantThing property here 
    } 
    ... 
    // Some method gets called when property changes 
    ... 
} 

public class MyModel 
{ 
    ... 
    public bool ImportantThing 
    { 
     get { return _importantThing; } 
     set 
     { 
      _importantThing = value; 

      // This is existing code and notifies some controls, but not the ones 
      // I'm interested in. It should notify MyControl as well. I know in 
      // most applications, this is OnPropertyChanged(); 
      RaisePropertyChanged("ImportantThing"); 
     } 
    } 
} 

Любые указатели?

+1

Вам нужно предоставить больше кода, чтобы мы поняли, что вы на самом деле пытаетесь сделать. –

+0

Вы хотите связать какое свойство usercontrol с ВажнымТехе? – Nitin

+0

Это был мой вопрос. Я подумал, что это нужно назвать чем-то особенным. – Frecklefoot

ответ

0

Прошу прощения, мой первоначальный вопрос не все, что понятно, но я нашел решение. Оказывается UserControl (MyControl в моем оригинальном примере) уже наблюдая модель для изменений:

_myModel.PropertyChanged += Model_PropertyChanged; 

В существующей функции обратного вызова (Model_PropertyChanged()), я просто посмотрел на собственность, я был заинтересован в и добавил все остальное я необходимо:

void Model_PropertyChanged(object sender, System.ComponentModel.PropertyChangedEventArgs e) 
{ 
    if (e.PropertyName == "StatusEnabled") 
    { 
     // do stuff 
    } 
    else if (e.PropertyName == "ImportantThing") 
    { 
     // my stuff 
    } 
} 

Спасибо за вход каждого!

1

Некоторые указатели ....

Ваш вопрос \ решение звучит как задачи для ValueConverter. Но во-первых, я могу видеть код в файле кода UserControl, вам действительно нужно принять и применить шаблон MVVM ... ОК есть кривая обучения [крутой], и иногда вы задаетесь вопросом, стоит ли это усилий (знаю, что я сделал, когда Я начал с XAML) ... Но, честное слово, MVVM, просто не нужно разрабатывать WPF. Если попытаться применить WinForms UI Logic для WPF это станет неосновательным, неуправляемым монолитным куча запутанного кода ....

вы можете найти эту ссылку на блог Рэйчел Лим полезный ....

https://rachel53461.wordpress.com/category/mvvm/

и ValueConverter взглянуть на это .....

http://www.wpftutorial.net/ValueConverters.html

+0

«неуправляемая монолитная куча кода спагетти ....»? Слишком поздно! Как я уже сказал, я просто добавляю к этому приложению функцию, которая была изначально разработана более 10 лет назад. Он действительно не придерживается MVVM, но мне не разрешено переписывать его, просто добавьте его. Благодаря! – Frecklefoot

+1

Если первоначальный разработчик вообще не использовал шаблон представления \ ViewMode Data Bindingl, вы, вероятно, могли бы воспользоваться и создать свой собственный MyControl_ViewModel, установить для него MyControl Datacontext, и тогда вы сможете свободно вводить свой «новый» код, используя MVVM за кулисами ... .. – Monty

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