Así que estoy trabajando en la aplicación MVVM & Estoy comenzando a poner un poco de brillo & polaco en la funcionalidad.Silverlight MVVM - Habilitar botones y propiedades de visibilidad
En el lado izquierdo de la página, estoy mostrando estos valores:
DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
Si hay una fecha en el PP, estoy viendo en un bloque de texto. Si no lo hay, estoy mostrando un botón al usuario, diciendo "Activar orden de trabajo", "Orden de trabajo completo", etc. ...
Estoy vinculando la visibilidad de cada uno de estos 8 (4 bloques de texto, Botón 4) controla una propiedad única en mi ViewModel
del tipo Windows.Visibility
. En mi setter del SelectedWorkOrder
, evalúo el valor actual de la propiedad SelectedWorkOrder.DateActivated
(por ejemplo) y configuro las propiedades de visibilidad en consecuencia. Esto es un poco detallado para mí, pero está funcionando como se esperaba.
Mi siguiente paso es deshabilitar cualquier botón visible después del primero (la lógica es simple ... no puede hacer clic en el botón 2 hasta que se haya hecho clic en el botón 1. No se puede hacer clic en el botón 3 hasta que ambos 1 & 2 hizo clic) No estoy seguro de cuál es la mejor manera de implementar esto. Como un FYI sobre esto, ya tengo un convertidor de valor de boolToVisibility en mi proyecto ... No estoy seguro de que su implementación sea diferente a la que estoy haciendo ahora (vea el código de VM a continuación).
Actualmente tengo esto para mi 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}" />
Código VM:
if (_SelectedWorkOrder.DateActivated.ToShortDateString() != "1/1/0001")
{
ActivatedTextBlockVisibility = Visibility.Visible;
ActivatedButtonVisibility = Visibility.Collapsed;
}
else
{
ActivatedTextBlockVisibility = Visibility.Collapsed;
ActivatedButtonVisibility = Visibility.Visible;
}
(La fecha se establece en 1/1/0001
en mi capa de acceso a la base de datos como estoy crear instancias de un nuevo DateTime
si Is DBNull.Value = true
)
recomiendo encarecidamente el uso de [ 'DateTime.MinValue'] (http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx) en lugar de lanzar DateActivated a una cadena y compararla con "1/1/0001". –