如何让 aDataGridTextColumn
显示'-'(连字符)而不是0。
以下是数据网格当前的设置方式:
<Grid>
<DataGrid x:Name="EmployeeHours"
AutoGenerateColumns="False"
ItemsSource="{Binding EmployeeHoursLastWeek}"
Width="Auto">
<DataGrid.Columns>
<DataGridTextColumn Header="PerceptionistID"
Binding="{Binding PerceptionistID}"
Width="100" />
<DataGridTextColumn Header="Week Of"
Binding="{Binding WeekOf, StringFormat={}{0:MM/dd/yyyy}}"
Width="75" />
<DataGridTextColumn Header="Regular Hours"
Binding="{Binding WorkHours}"
Width="100" />
<DataGridTextColumn Header="PTO Hours"
Binding="{Binding PTOHours}"
Width="100" />
<DataGridTextColumn Header="Holiday Hours"
Binding="{Binding HolidayHours}"
Width="100" />
</DataGrid.Columns>
</DataGrid>
</Grid>
Run Code Online (Sandbox Code Playgroud)
PTOHours 和 HolidayHours 通常为 0,如果任何具有 0 的单元格显示“-”,则可以更轻松地识别具有非 0 值的单元格。
我正在使用转换器检查字符串长度是否大于0.如果它更大我会返回true,否则为false.
一切都很好.但我想知道这是否是转换器的正确方法?
public object Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
bool error = false;
if (value != null)
{
if (value.ToString().Length > 0)
{
error = true;
}
else
{
error = false;
}
}
return error;
}
public object ConvertBack(object value, Type targetType, object parameter, CultureInfo culture)
{
throw new InvalidOperationException("IsNullConverter can only be used OneWay.");
}
Run Code Online (Sandbox Code Playgroud) 我希望能够将接口的 Type 对象作为 ConverterParameter 传递给我的类型转换器。我的想法是,我希望转换器根据源值是否实现特定接口返回一个值。
如果我将类型名称作为字符串传递,我有一个方法可以工作,但我宁愿让它成为一个强类型值,以避免潜在的维护问题,并进行编译时检查,而不是依赖运行时的故障。
这是我使用字符串的转换器:
class InterfaceToVisibilityConverter : IValueConverter
{
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
if (value != null)
{
var type = value.GetType();
if (type.GetInterface(parameter as string) != null)
{ return Visibility.Visible; }
}
return Visibility.Collapsed;
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
}
Run Code Online (Sandbox Code Playgroud)
除了上述潜在的维护问题之外,它的效果很好。
这是您在 xaml 中使用它的方式:
<TabItem Header="General"
Visibility="{Binding ConverterParameter=IMyType, Converter={StaticResource InterfaceToVisibilityConverter}}">
<TextBlock Text="Whatever Content Goes here."/>
</TabItem>
Run Code Online (Sandbox Code Playgroud)
在上面的示例中,它检查当前的 DataContext …
我需要将标签绑定到一个复合值 - 由模型中的几个值组成。我正在尝试使用 ValueConverter 来执行此操作,但我无法弄清楚如何将对象本身传递给 ValueConverter。这是我的代码:在 XAML 中:
<ContentPage xmlns="http://xamarin.com/schemas/2014/forms"
xmlns:x="http://schemas.microsoft.com/winfx/2009/xaml"
xmlns:local="clr-namespace:MyApp;assembly=MyApp"
x:Class="MyApp.SavedDetailsPage">
<ContentPage.Resources>
<ResourceDictionary>
<local:DetailsConverter x:Key="detailsCvt" />
</ResourceDictionary>
</ContentPage.Resources>
...
<Label Text="{Binding ???, Converter={StaticResource detailsCvt}}" FontSize="Small" TextColor="Gray" />
...
Run Code Online (Sandbox Code Playgroud)
在 DetailsConverter.cs 中:
class DetailsConverter : IValueConverter
{
object IValueConverter.Convert(object value, Type targetType, object parameter, CultureInfo culture)
{
MyModel myModel = (MyModel)value;
return (myModel.FirstName + " " + myModel.LastName);
}
...
Run Code Online (Sandbox Code Playgroud)
我尝试使用“。” 用于绑定到 self ,但这不起作用。
我通过向 MyModel 添加一个 .This 属性找到了一种解决方法,它可以访问对象本身,因此我可以在 XAML 绑定中传递“This”,但不确定这是否是最好的方法。
提前致谢!
我有一个带有Grid和TreeView的WPF窗口.Grid的datacontext绑定到树视图上的选定项.但是,因为并非所有treeviewitems都适用,所以如果treviewitem不适用,我想禁用网格.所以,我创建了一个值转换器来进行空检查并返回一个bool.(在这种情况下,适用的项目不会为空)
问题是从未使用过值转换器.我设定了破发点,他们从未被击中过.我有其他价值转换器我正在使用它们都工作得很好.
有什么我想念的吗?
<Grid Grid.Column="1" Grid.Row="0" DataContext="{Binding MyVal}" IsEnabled="{Binding MyVal, Converter={StaticResource NullCheckConverter}}" Margin="2,2,2,2">
Run Code Online (Sandbox Code Playgroud)
并不是说这个问题很重要,但这里是ValueConverter代码:
internal class NullCheckValueConverter : IValueConverter
{
#region IValueConverter Members
public object Convert(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
return !(value == null);
}
public object ConvertBack(object value, Type targetType, object parameter, System.Globalization.CultureInfo culture)
{
throw new NotImplementedException();
}
#endregion
}
Run Code Online (Sandbox Code Playgroud) 我在datagrid中选中了复选框
<DataTemplate>
<CheckBox x:Name="chkActive" IsChecked="{Binding Active, Mode=TwoWay}"
Style="{StaticResource checkboxStyleNormal}" IsEnabled="True"/>
</DataTemplate>
Run Code Online (Sandbox Code Playgroud)
并绑定数据网格
datagrid1.ItemSource = dtData.DefaultView;
Run Code Online (Sandbox Code Playgroud)
在数据表中,我正在使用Active,0
并且1
,我想在显示我的复选框时检查Active = 0
网格绑定但我无法绑定复选框.
有人请告诉我如何根据我的情况显示复选框选中/取消选中.