получение свойства от ViewModel - PullRequest
0 голосов
/ 19 марта 2012

У меня есть модель вида, подобная этой:

 public class BaseViewModelTech : INotifyPropertyChanged
{


    static string _TechnicianID;
    public string TechnicianID
    {
        get {                
            return _TechnicianID;
        }
        set {

            _TechnicianID = TechnicianID; 
            OnPropertyChanged("TechnicianID");
        }

    }

    static string _DeviceID;
    public string DeviceID
    {
        get
        {
            return _DeviceID;
        }
        set
        {
            _DeviceID = DeviceID;
            OnPropertyChanged("DeviceID");
        }

    }



    // In ViewModelBase.cs
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propertyName)
    {
        this.VerifyPropertyName(propertyName);

        PropertyChangedEventHandler handler = this.PropertyChanged;
        if (handler != null)
        {
            var e = new PropertyChangedEventArgs(propertyName);
            handler(this, e);
        }
    }

    [Conditional("DEBUG")]
    [DebuggerStepThrough]
    public void VerifyPropertyName(string propertyName)
    {
        // Verify that the property name matches a real,  
        // public, instance property on this object.
        if (TypeDescriptor.GetProperties(this)[propertyName] == null)
        {
            string msg = "Invalid property name: " + propertyName;
            Debug.Fail(msg);
        }
    }
}

Я отправляю ее в качестве параметра в мой xaml.cs

 public partial class BaseView   : Window{
  BaseViewModelTech  viewModel; 
        public BaseView  (BaseViewModelTech   vm)
        {
            InitializeComponent();
            viewModel = vm;
        }}

что я пишу для доступа к ней через xaml с помощью привязки??Я не смог понять несколько примеров.

Ответы [ 2 ]

2 голосов
/ 19 марта 2012

Измените ваш код немного позади вашего взгляда:

public partial class BaseView   : Window
{
    BaseViewModelTech  viewModel; 

    public BaseView  (BaseViewModelTech   vm)
    {
        InitializeComponent();
        viewModel = vm;
        this.DataContext = vm;   // <----------- add this
    }
}

И тогда в вашем XAML вы можете получить что-то вроде этого:

<TextBlock Text="{Binding TechnicianID}" />

Также обратите внимание, что в ваших установщиках вы хотите сделать уведомление после , значение свойства изменяется, а не до:

    set
    {
        _DeviceID = DeviceID;
        OnPropertyChanged("DeviceID");  // <------ this goes after the member variable change
    }
1 голос
/ 19 марта 2012

В вашем случае вы не можете напрямую ссылаться на вашу ViewModel непосредственно в xaml, потому что ваш экземпляр vm является участником вашего View.Итак, вы должны установить DataContext вашего представления сначала в коде:

  public partial class BaseView   : Window{
  BaseViewModelTech  viewModel; 
        public BaseView  (BaseViewModelTech   vm)
        {
            InitializeComponent();
            viewModel = vm;
            this.DataContext=viewModel;
        }}

, затем в вашем my xaml.xaml, например, для метки:

    <Label Content="{Binding TechnicianID }"/>
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...