Как получить доступ к свойству в XAML - PullRequest
0 голосов
/ 13 января 2011

Я новичок в WPF Как уже упоминалось, у меня есть собственность в классе

public ObservableCollection<Company> GetCompany
        {
            get
            {
                return _collectionCompany;
            }
        }

Как я могу получить к нему доступ в XAML? Я пытаюсь так:

<DataGridComboBoxColumn Header="Company" ItemsSource="{StaticResource GetCompany}"  Width="200"></DataGridComboBoxColumn>

Но выдает ошибку.

Ответы [ 2 ]

2 голосов
/ 13 января 2011

сначала вам нужно разрешить xaml получить доступ к свойству, установив его DataContext:

, если свойство находится в codebehind, добавьте это к элементу окна:

DataContext="{Binding RelativeSource={RelativeSource self}}"

elseесли он находится в отдельном классе viewModel (предпочтительный метод)

public MainWindow()
{
    MainWindowViewModel viewModel = new MainWindowViewModel();
    this.DataContext = viewModel;

    InitializeComponent();
}

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

class MainWindowViewModel : INotifyPropertyChanged
{       
    ObservableCollection<Company> _company;
    public ObservableCollection<Company> Company
    {
        get
        {
            return _company;
        }
        set
        {
            if ( _company != value )
            {
                _company = value;
                RaisePropertyChanged( "Company" );
            }
        }
    }

    public event PropertyChangedEventHandler PropertyChanged;

    protected void RaisePropertyChanged( string name )
    {
        PropertyChangedEventHandler handler = PropertyChanged;
        if ( handler != null ) handler( this, new PropertyChangedEventArgs( name ) );
    }

Просто отметьте, что GetCompany & SetCompany следует использовать в качестве имен свойств, вместо этого используйте this.Company, чтобы отличать его отимя класса.

1 голос
/ 13 января 2011
<DataGridComboBoxColumn Header="Company" ItemsSource="{Binding GetCompany}"  ...

Однако вы должны убедиться, что это свойство доступно через разметку.Если свойство определено в вашем коде, вы можете написать в конструкторе:

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