我已经没有想法尝试根据公共属性中设置的值(在 WPF/XAML/MVVM Light 应用程序中)折叠 DataGridTextcolumn。
xaml 的提取物是:
<StackPanel>
<DataGrid AutoGenerateColumns="False" Name="PipelinesGrid"
HorizontalAlignment="Left"
ItemsSource="{Binding Pipelines}"
SelectedItem="{Binding SelectedPipelineView, Mode=TwoWay}"
VerticalAlignment="Top" Margin="10,16,0,0"
SelectionUnit="FullRow" SelectionMode="Single"
CanUserAddRows="False">
<DataGrid.Columns>
<DataGridTextColumn
Binding="{Binding DailyCapacity, Mode=TwoWay}"
Header="Capacity(d)"
Visibility="{Binding Source={x:Reference PipelinesGrid},
Path=DataContext.ShowCapacities}"/>
这是 Visibility 设置是我尝试过的众多设置之一(这个设置会产生周期性依赖错误)。
ViewModel 代码的相关摘录是:
private string _showCapacities;
public string ShowCapacities
{
get { return _showCapacities; }
set { _showCapacities = value; RaisePropertyChanged("ShowCapacities"); }
}
private void OnProjectSelected(ProjectSelectedArgs obj)
{
_selectedProject = obj.SelectedProject;
if (_selectedProject != null)
{
Pipelines = new ObservableCollection<PipelineView>();
foreach (var projectPipeline in _selectedProject.ProjectPipelines)
{
Pipelines.Add(new PipelineView(projectPipeline));
}
switch (_selectedProject.ProjectCategory.ProjectCategory1)
{
case "Upstream":
ShowCapacities = "Collapsed";
break;
case "Mid-Stream":
ShowCapacities = "Visible";
break;
}
}
IsEditing = false;
}
这篇文章 (http://stackoverflow.com/questions/8847661/datagridtextcolumn-visibility-binding) 告诉我,我需要使用 Source 和 Xreference。谢谢你的帮助。