2011-01-13 40 views
0

我在WPF 一個新手由於有口難言財產類如何訪問屬性爲XAML

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

我怎樣才能訪問它在XAML? 我想這樣:

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

但它給出了一個錯誤。

回答

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

但是,您必須看看這個屬性可以通過標記訪問。如果財產是你定義的代碼隱藏,你可以在構造函數中寫:

DataContext=this; 
+0

我已經嘗試過上面的代碼,但仍然沒有填充組合框 – Khaniya

2

首先你需要允許XAML通過設置它的DataContext訪問屬性:

如果該屬性是在代碼隱藏,這添加到窗口元件:

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

否則,如果是在一個單獨的ViewModel類(優選方法)

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

    InitializeComponent(); 
} 

這個viewmodel應該實現INotifyPropertyChanged,如果你不想在更改屬性時更新UI(我假設是這樣),但是如果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 & SetCompany作爲屬性名稱,而是使用this.Company從類名稱區分開來。