【发布时间】:2015-11-26 23:48:25
【问题描述】:
我有一个值转换器,当它的文本是否以 http 开头时,它可以转换控件的可见性方面。下面是代码。
public class HTTPVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool boolVisbility = (value != null) && value.ToString().StartsWith("http");
boolVisbility = (parameter != null) ? !boolVisbility : boolVisbility;
return boolVisbility ? Visibility.Visible : Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new NotImplementedException();
}
}
我已将此代码放在 ToolViewe.xaml.cs 中。 我正在尝试在我的数据网格中使用上述转换器,如下所示:
<slData:DataGrid x:Name="CustomerDetailsDataGrid"
ItemsSource=" {Binding SingleReturnedItemAttributes}"
AutoGenerateColumns="False"HeadersVisibility="None"
ScrollViewer.HorizontalScrollBarVisibility="Visible"
ScrollViewer.VerticalScrollBarVisibility="Visible" MaxHeight="350"
MaxWidth="350">
<slData:DataGrid.Columns>
<slData:DataGridTextColumn Binding=" {Binding Path=Key}"
FontWeight="Bold"/>
<slData:DataGridTextColumn Binding="{Binding Path= Value}" Visibility="
{Binding Path=IsControlVisible,Converter={StaticResource theHttpVisbilityConverter}}"
/>
<slData:DataGridTextColumn Binding="{Binding Path= Value}" Visibility="
{Binding Path=IsControlVisible ,Converter={StaticResource theHttpVisbilityConverter},
ConverterParameter=reverse}"
/>
</slData:DataGrid.Columns>
我应该为可见性的绑定路径使用什么?我尝试通过在 ToolViewModel.cs 中声明代码来使用以下属性。但不起作用。请指导这个新手。
bool isControlVisible = false;
public bool IsControlVisible
{
get { return isControlVisible; }
set
{
isControlVisible = value;
this.RaisePropertyChanged(() => this.IsControlVisible);
}
}
这是错误:“System.Windows.Data.Binding”类型的对象无法转换为“System.Windows.Visibility”类型。
【问题讨论】:
-
不太清楚你要做什么,如果你想隐藏整个列,那么你需要使用binding proxy。如果要隐藏单个单元格,则需要 set the element style 代替。两种情况都是重复的。
-
嗨,马克,你说的是真的。将有两列,一行的一个单元格将有一个 url 。我只需要将 url 作为链接,或者如果文本不包含 : http 那么它将显示为纯文本。看起来像这样
标签: c# silverlight mvvm prism