我有一个xaml UserControl,其中的DataContext引用了一个“控件”-ViewModel。
mc:Ignorable="d" d:DataContext="{d:DesignInstance controls:ControlViewModel}"此外,我已经将ItemsSource绑定到一个ObservableCollection,它是一个“数据”-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");
}
}
}"Data"-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 Collection的通用DataViewModel (属性),如Binding属性。因此它无法解决,并且始终处于默认状态。
发布于 2015-10-15 02:02:53
如果您想要一个可绑定的属性,那么向控制readonly属性的属性添加第二个RaisePropertyChanged。
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; }
}
}您还可以使用类型转换器,如this
https://stackoverflow.com/questions/33131584
复制相似问题