我是WPF的新手 提到我在课堂上有财产
public ObservableCollection<Company> GetCompany
{
get
{
return _collectionCompany;
}
}
如何在XAML中访问它? 我这样想:
<DataGridComboBoxColumn Header="Company" ItemsSource="{StaticResource GetCompany}" Width="200"></DataGridComboBoxColumn>
但它给出了一个错误。
答案 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;