[英]MVVM Datagrid to Observable Collection binding of generic types
我有一個xaml UserControl,其中DataContext引用了“ Control” -ViewModel。
mc:Ignorable="d" d:DataContext="{d:DesignInstance controls:ControlViewModel}"
此外,我已將ItemsSource綁定到ObservableCollection,后者是“ Data” -ViewModel的通用類。 (請注意:這些數據僅用於演示)
<DataGrid ItemsSource="{Binding DataCollection}" SelectedItem="{Binding SelectedData}">
<DataGrid.Columns>
<DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
<DataGridTextColumn Header="Age" Visibility="{Binding AgeVisibility}" Binding="{Binding Age}"/>
</DataGrid.Columns>
</DataGrid>
public class ControlViewModel
{
private ObservableCollection<DataViewModel> _dataViewModels;
public ObservableCollection<DataViewModel> DataViewModels
{
get { return _dataViewModels; }
set
{
_dataViewModels = value;
RaisePropertyChanged("DataViewModels");
}
}
}
“數據” -ViewModel具有以下屬性,我已將它們綁定到特定的DataGridTextColumn(如您所見)。
public class DataViewModel
{
private string _name;
public string Name
{
get { return _name; }
set
{
_name = value;
RaisePropertyChanged("Name");
}
}
private int _age;
public int Age
{
get { return _age; }
set
{
_age = value;
RaisePropertyChanged("Age");
}
}
private Visibility _ageVisibility;
public Visibility AgeVisibility
{
get { return _ageVisibility; }
}
}
一切正常,希望“年齡”(Age)列的Visibilty屬性不會輕易引用Observable集合的通用DataViewModel(屬性),例如Binding屬性。 因此無法解決,並且始終處於默認狀態。
如果您想要一個可綁定的屬性,則將第二個RaisePropertyChanged
添加到控制readonly屬性的屬性中。
public class DataViewModel
{
//other stuff
private int _age;
public int Age
{
get { return _age; }
set
{
_age = value;
RaisePropertyChanged("Age");
RaisePropertyChanged("AgeVisibility");
}
}
public Visibility AgeVisibility
{
get { return this.Age > 0 ? Visibility.Visible : Visibility.Hidden; }
}
}
您也可以像這樣使用類型轉換器
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.