【发布时间】:2014-02-12 13:27:16
【问题描述】:
我似乎无法让我的能见度转换器工作。我认为问题在于我在构造函数中设置了相关属性,所以它并没有把它捡起来。代码如下,有什么建议可以解决这个问题吗?
MainWindowViewModel:(这是主页面;单击按钮将打开第二个窗口)
var newWindow = new SecondaryWindow
{
Title = title,
DataContext = new SecondaryWindowViewModel{MyData = data, ShowAdditionalColumns = false}
};
newWindow.Show();
辅助窗口: 这是相关的 XAML:
<Window.Resources>
<myApp:DataGridVisibilityConverter x:Key="gridVisibilityConverter" />
</Window.Resources>
<DataGrid ItemsSource="{Binding Path=MyData}" AutoGenerateColumns="False" >
<DataGrid.Columns>
<DataGridCheckBoxColumn Header="Print" Binding="{Binding Path=IsSelected}"/>
<DataGridTextColumn Header="FirstName" Binding="{Binding Path=FirstName}" IsReadOnly="True"/>
<DataGridTextColumn Header="LastName" Binding="{Binding Path=LastName}" IsReadOnly="True"/>
<DataGridTextColumn Header="Lines" Binding="{Binding Path=TotalLines}" IsReadOnly="True" Visibility="{Binding Path=ShowAdditionalColumns, Converter={StaticResource gridVisibilityConverter}}"/>
以及辅助 ViewModel 代码:
private bool showAdditionalColumns;
public bool ShowAdditionalColumns
{
get { return showAdditionalColumns; }
set
{
showAdditionalColumns= value;
NotifyPropertyChanged(() => ShowAdditionalColumns);
}
}
这是转换器;这里很标准的东西。我在 convert 方法中放了一个断点;而且它从未被击中:
[ValueConversion(typeof(bool), typeof(Visibility))]
public class DataGridVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
var booleanValue = (bool)value;
return booleanValue ? Visibility.Visible : Visibility.Hidden;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
【问题讨论】:
-
请显示可见性转换器的代码。
-
由于在设置属性时对象尚未完全构造,因此无法监听属性更改事件。一些疯狂的想法: ShowAdditionalColumns 不能成为 Dependency 属性是否有原因?我相信这会解决问题。或者您可以为 SecondaryWindow 的 DataContextChanged 事件设置处理程序并在处理程序中设置属性...
-
输出窗口有什么抱怨吗?其他
DataGridTextColumns绑定正确吗? -
NotifyPropertyChanged(() => ShowAdditionalColumns);它的作用.. 显示PropertyChanged实现..
标签: wpf converter ivalueconverter