如何访问属性到XAML

时间:2011-01-13 10:33:18

标签: c# wpf xaml

我是WPF的新手 提到我在课堂上有财产

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

如何在XAML中访问它? 我这样想:

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

但它给出了一个错误。

2 个答案:

答案 0 :(得分:2)

首先,您需要允许xaml通过设置DataContext来访问该属性:

如果属性在代码隐藏中,请将其添加到窗口元素:

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

否则,如果它位于单独的viewModel类(首选方法)

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

    InitializeComponent();
}

如果你想在属性发生变化时更新UI(我假设是这样),那么这个viewmodel应该实现INotifyPropertyChanged,但是如果UI只对该属性有写访问权限,那么这不是必需的。

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&amp;将SetCompany作为属性名称,而不是使用this.Company将其与类名区分开来。

答案 1 :(得分:1)

<DataGridComboBoxColumn Header="Company" ItemsSource="{Binding GetCompany}"  ...

但是,您必须通过标记查看此属性。如果在代码隐藏中定义了属性,则可以在构造函数中编写:

DataContext=this;