自动生成的数据网格中的日期时间转换器
我创建了一个包含 5 列的自动生成的数据网格,其中 3 列是日期时间,另外 2 列是字符串。我需要能够从日期时间列条目末尾删除时间。
通常我使用日期转换器,但我从中得到奇怪的结果,我猜这是因为它应用于整个数据网格而不仅仅是日期时间列。
谁能帮我解决这个问题吗?有没有办法挑出日期时间列来应用转换器?
谢谢,我将在下面附加一些代码:
MainPage.xaml:
<UserControl x:Class="Peppermint.Flix.UI.Views.MainPage"
xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:local="clr-namespace:Peppermint.Flix.UI"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="0.5*" />
<RowDefinition Height="10*" />
</Grid.RowDefinitions>
<Grid x:Name="QuickNav" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="ComboBox" Grid.Column="0">
<ComboBox HorizontalAlignment="Stretch" Height="20" ItemsSource="{Binding NavItems}" SelectedItem="{Binding NavItem, Mode=TwoWay}" />
</Grid>
<Grid x:Name="GoButton" Grid.Column="1">
<Button Content="Go" HorizontalAlignment="Left" Height="20" Command="{Binding GoCommand, Mode=OneTime}" />
</Grid>
</Grid>
<Grid x:Name="DataGrid" Grid.Row="1" >
<sdk:DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="True" ItemsSource="{Binding TransferPackages, Converter={StaticResource DateTimeConverter} }"/>
</Grid>
</Grid>
</UserControl>
MainViewModel.cs:
public class MainViewModel : ViewModelBase
{
private string _navItem;
private TransferPackageViewModel _data;
#region Constructor
public MainViewModel()
{
GoCommand = new DelegateCommand<object>(QuickNavGo);
TransferPackages = new ObservableCollection<TransferPackageViewModel>();
NavItems = new List<string> { "QUICK NAV", "New Transfer Package" };
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 7 The Golden Amulet in 4D (12A)", CreatedBy = "Bilbo Baggins" });
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 8 The Hairy InnKeeper in 4D (12A)", CreatedBy = "Bilbo Baggins" });
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 7 The Milking the Cow in 5D (12A)", CreatedBy = "Bilbo Baggins" });
}
#endregion
public TransferPackageViewModel Data
{
get { return _data; }
set { _data = value; OnPropertyChanged("Data"); }
}
public void QuickNavGo(object obj)
{
MessageBox.Show("This will open the new Transfer Package Window");
}
public string NavItem
{
get { return _navItem; }
set { _navItem = value; OnPropertyChanged("NavItem"); }
}
public ObservableCollection<TransferPackageViewModel> TransferPackages { get; set; }
public List<string> NavItems { get; set; }
public ICommand GoCommand { get; set; }
}
}
DateTimeConverter.cs:
public class DateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (parameter != null)
{
string formatString = parameter.ToString();
if (!string.IsNullOrEmpty(formatString))
{
return string.Format(culture, formatString, value);
}
}
return value.ToString();
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value != null)
{
return DateTime.Parse(value.ToString());
}
return value;
}
}
}
I have created an autogenerated datagrid with 5 columns, 3 of which are DateTime and the other 2 are Strings. I need to be able to remove the time from the end of the datetime columns entries.
Normally i use a dateconverter but i am getting strange results from it, i'm guessing this is because its applied on the whole datagrid and not just the datetime columns.
Can anyone help me fix this? is there a way to single out the datetime columns to apply the converter?
Thanks and i'll attach some code below:
MainPage.xaml:
<UserControl x:Class="Peppermint.Flix.UI.Views.MainPage"
xmlns:my="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Data"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:navigation="clr-namespace:System.Windows.Controls;assembly=System.Windows.Controls.Navigation"
xmlns:local="clr-namespace:Peppermint.Flix.UI"
mc:Ignorable="d"
d:DesignHeight="300" d:DesignWidth="400" xmlns:sdk="http://schemas.microsoft.com/winfx/2006/xaml/presentation/sdk">
<UserControl.Resources>
<local:DateTimeConverter x:Key="DateTimeConverter" />
</UserControl.Resources>
<Grid x:Name="LayoutRoot" Background="White">
<Grid.RowDefinitions>
<RowDefinition Height="0.5*" />
<RowDefinition Height="10*" />
</Grid.RowDefinitions>
<Grid x:Name="QuickNav" Grid.Row="0">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="0.2*"/>
<ColumnDefinition Width="1*"/>
</Grid.ColumnDefinitions>
<Grid x:Name="ComboBox" Grid.Column="0">
<ComboBox HorizontalAlignment="Stretch" Height="20" ItemsSource="{Binding NavItems}" SelectedItem="{Binding NavItem, Mode=TwoWay}" />
</Grid>
<Grid x:Name="GoButton" Grid.Column="1">
<Button Content="Go" HorizontalAlignment="Left" Height="20" Command="{Binding GoCommand, Mode=OneTime}" />
</Grid>
</Grid>
<Grid x:Name="DataGrid" Grid.Row="1" >
<sdk:DataGrid HorizontalAlignment="Stretch" VerticalAlignment="Stretch" AutoGenerateColumns="True" ItemsSource="{Binding TransferPackages, Converter={StaticResource DateTimeConverter} }"/>
</Grid>
</Grid>
</UserControl>
MainViewModel.cs:
public class MainViewModel : ViewModelBase
{
private string _navItem;
private TransferPackageViewModel _data;
#region Constructor
public MainViewModel()
{
GoCommand = new DelegateCommand<object>(QuickNavGo);
TransferPackages = new ObservableCollection<TransferPackageViewModel>();
NavItems = new List<string> { "QUICK NAV", "New Transfer Package" };
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 7 The Golden Amulet in 4D (12A)", CreatedBy = "Bilbo Baggins" });
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 8 The Hairy InnKeeper in 4D (12A)", CreatedBy = "Bilbo Baggins" });
TransferPackages.Add(new TransferPackageViewModel { TransferPackageName = "Harry Potter 7 The Milking the Cow in 5D (12A)", CreatedBy = "Bilbo Baggins" });
}
#endregion
public TransferPackageViewModel Data
{
get { return _data; }
set { _data = value; OnPropertyChanged("Data"); }
}
public void QuickNavGo(object obj)
{
MessageBox.Show("This will open the new Transfer Package Window");
}
public string NavItem
{
get { return _navItem; }
set { _navItem = value; OnPropertyChanged("NavItem"); }
}
public ObservableCollection<TransferPackageViewModel> TransferPackages { get; set; }
public List<string> NavItems { get; set; }
public ICommand GoCommand { get; set; }
}
}
DateTimeConverter.cs:
public class DateTimeConverter : IValueConverter
{
public object Convert(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (parameter != null)
{
string formatString = parameter.ToString();
if (!string.IsNullOrEmpty(formatString))
{
return string.Format(culture, formatString, value);
}
}
return value.ToString();
}
public object ConvertBack(object value, Type targetType,
object parameter, CultureInfo culture)
{
if (value != null)
{
return DateTime.Parse(value.ToString());
}
return value;
}
}
}
如果你对这篇内容有疑问,欢迎到本站社区发帖提问 参与讨论,获取更多帮助,或者扫码二维码加入 Web 技术交流群。
绑定邮箱获取回复消息
由于您还没有绑定你的真实邮箱,如果其他用户或者作者回复了您的评论,将不能在第一时间通知您!
发布评论
评论(2)
您可以通过处理
DataGrid
的AutoGenerateColumn
事件来解决这个问题,就像在该事件中执行此操作
和一个简单的转换器一样
You can solve this problem by handling
AutoGeneratingColumn
event ofDataGrid
like thisin that event do this
and a simple converter
它也适用于 DataGrid_AutoGenerateColumn 事件处理程序中的以下代码片段:
DataGridBoundColumn col = e.Column as DataGridTextColumn;
在这里,您只需更改日期列中的日期格式,无需使用转换器。
It works also with this code snippet in your DataGrid_AutoGeneratingColumn event Handler:
DataGridBoundColumn col = e.Column as DataGridTextColumn;
Here you just change the date format in your date column without using a converter.