Bu yüzden MVVM uygulamasında çalışıyorum & Işlevine & parlaklıktan bir miktar koymaya başlıyorum. Benim sayfanın sol tarafında Silverlight MVVM - Butonu Görünürlük ve Görünürlük özellikleri
, ben bu değerleri gösteren ediyorum:DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
DB tarih varsa, bir TextBlock yayınlamaya ediyorum. Olmazsa, "İş Emrini Etkinleştir", "İş Emrini Tamamla" diyerek kullanıcıya bir düğme gösteriyorum, vb ...
Bu 8'in her birinin görünürlüğünü bağlayıcıyorum (4 textblock, 4 düğmesi),Windows.Visibility
türünde benzersiz bir özelliğe denetler. SelectedWorkOrder
ayarlayıcımdaki SelectedWorkOrder.DateActivated
özelliğinin geçerli değerini değerlendiriyorum (örneğin) ve görünürlük özelliklerini buna göre ayarlayın. Bu benim için biraz ayrıntılı, ama beklendiği gibi çalışıyor.
Bir sonraki adım, ilk düğünden sonra görünen düğmelerin devre dışı bırakılmasıdır (mantık basittir ... 1 düğmesine tıklanana kadar 2 numaralı düğmeyi tıklatamaz. 1 & 2 numaralı düğüme kadar 3 numaralı düğmeyi tıklatamazsınız) tıkladım. Bunu yapmanın en iyi yolunun ne olduğundan emin değilim. Bu konuda bir FYI olarak, projemde zaten bir boolToVisibility değeri dönüştürücüsüne sahibim ... Bunu uygulamanın şu an yaptığımdan farklı olacağını emin değilim (aşağıdaki VM koduna bakın).
<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}" />
VM Kodu:
Şu benim XAML için bu var
if (_SelectedWorkOrder.DateActivated.ToShortDateString() != "1/1/0001")
{
ActivatedTextBlockVisibility = Visibility.Visible;
ActivatedButtonVisibility = Visibility.Collapsed;
}
else
{
ActivatedTextBlockVisibility = Visibility.Collapsed;
ActivatedButtonVisibility = Visibility.Visible;
}
(Yeni DateTime
eğer başlatmasını ediyorum olarak tarih benim veritabanı erişim katmanında 1/1/0001
olarak ayarlanır Is DBNull.Value = true
)
şiddetle kullanmanızı tavsiye [ 'DateTime.MinValue'] (http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx) DateActivated öğesini bir dizeye dökmek yerine "1/1/0001" ile karşılaştırmak yerine. –