所以我正在开发一个MVVM应用程序,并开始为功能添加一些闪光和磨光效果。
在我的页面左侧,我正在显示这些值:
如果在数据库中有日期,我会在文本块中显示它。如果没有,我会向用户显示一个按钮,上面写着“激活工作订单”、“完成工作订单”等等...
我将这8个控件(4个文本块和4个按钮)的可见性绑定到我的ViewModel中类型为Windows.Visibility的唯一属性。在我的SelectedWorkOrder的setter中,我评估SelectedWorkOrder.DateActivated属性的当前值(例如),并相应地设置可见性属性。对我来说,这有点啰嗦,但它按预期工作。
我的下一步是禁用第一个按钮后的任何可见按钮(逻辑很简单...在点击按钮1之前不能点击按钮2。在点击按钮1和2之前不能点击按钮3)。我不确定实现这一点的最佳方法是什么。顺便说一下,我已经在我的项目中有一个boolToVisibility值转换器...我只是不确定实现它是否与我现在所做的有所不同(请参见下面的VM代码)。
目前,我的XAML如下:
在我的页面左侧,我正在显示这些值:
DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
如果在数据库中有日期,我会在文本块中显示它。如果没有,我会向用户显示一个按钮,上面写着“激活工作订单”、“完成工作订单”等等...
我将这8个控件(4个文本块和4个按钮)的可见性绑定到我的ViewModel中类型为Windows.Visibility的唯一属性。在我的SelectedWorkOrder的setter中,我评估SelectedWorkOrder.DateActivated属性的当前值(例如),并相应地设置可见性属性。对我来说,这有点啰嗦,但它按预期工作。
我的下一步是禁用第一个按钮后的任何可见按钮(逻辑很简单...在点击按钮1之前不能点击按钮2。在点击按钮1和2之前不能点击按钮3)。我不确定实现这一点的最佳方法是什么。顺便说一下,我已经在我的项目中有一个boolToVisibility值转换器...我只是不确定实现它是否与我现在所做的有所不同(请参见下面的VM代码)。
目前,我的XAML如下:
<TextBlock Text="Proposed:" />
<TextBlock Text="Activated:" />
<TextBlock Text="Eng Completed:" />
<TextBlock Text="Trial Close:" />
<TextBlock Text="Accounting Close:" />
<TextBlock Text="{Binding SelectedWorkOrder.EstimatedStartDate}" Visibility="{Binding ProposedVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateActivated}" Visibility="{Binding ActivatedTextBlockVisibility}" />
<Button Content="Activate Work Order" Visibility="{Binding ActivatedButtonVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateCompleted}" Visibility="{Binding EngineeringCompletedTextBlockVisibility}" />
<Button Content="Work Order Eng Complete" Visibility="{Binding EngineeringCompletedButtonVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateClosed}" Visibility="{Binding TrialCloseTextBlockVisibility}" />
<Button Content="Close Work Order (Trial)" Visibility="{Binding TrialCloseButtonVisibility}" />
<TextBlock Text="{Binding SelectedWorkOrder.DateClosed}" Visibility="{Binding AccountingCloseTextBlockVisibility}" />
<Button Content="Close Work Order (Actual)" Visibility="{Binding AccountingCloseButtonVisibility}" />
虚拟机代码:
if (_SelectedWorkOrder.DateActivated.ToShortDateString() != "1/1/0001")
{
ActivatedTextBlockVisibility = Visibility.Visible;
ActivatedButtonVisibility = Visibility.Collapsed;
}
else
{
ActivatedTextBlockVisibility = Visibility.Collapsed;
ActivatedButtonVisibility = Visibility.Visible;
}
当我实例化一个新的DateTime
时,如果Is DBNull.Value = true
,我的数据库访问层中的日期将被设置为1/1/0001
。
DateTime.MinValue
,而不是将DateActivated转换为字符串并将其与"1/1/0001"进行比较。 - Dan J