因此,我正在MVVM應用程序中工作&我開始在功能上放一些亮點&波蘭語。Silverlight MVVM - 按鈕啓用和可見性屬性
在我的頁面的左邊,我顯示這些值:
DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
如果有一個數據庫中的日期,我的文字塊顯示它。如果沒有,我會向用戶顯示一個按鈕,說「激活工作訂單」,「完成工作訂單」等...
我綁定這8(4文本塊, 4按鈕)控制到類型Windows.Visibility
的ViewModel
中的一個獨特屬性。在我的設置器SelectedWorkOrder
中,我評估SelectedWorkOrder.DateActivated
屬性的當前值(例如)並相應地設置可見性屬性。這對我來說略顯冗長,但它按預期工作。
我的下一步是在第一個按鈕之後禁用任何可見的按鈕(邏輯很簡單...不能點擊按鈕2直到按鈕1被點擊,不能點擊按鈕3直到兩個& 2已經點擊)。我不確定實現這一點的最佳方式是什麼。作爲一個參考,我有一個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}" />
VM代碼:
if (_SelectedWorkOrder.DateActivated.ToShortDateString() != "1/1/0001")
{
ActivatedTextBlockVisibility = Visibility.Visible;
ActivatedButtonVisibility = Visibility.Collapsed;
}
else
{
ActivatedTextBlockVisibility = Visibility.Collapsed;
ActivatedButtonVisibility = Visibility.Visible;
}
(日期設置爲1/1/0001
在我的數據庫訪問層爲我實例化一個新DateTime
如果Is DBNull.Value = true
)
我強烈建議使用['DateTime.MinValue'(http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx)而不是將DateActivated轉換爲字符串並將其與「1/1/0001」進行比較。 – 2011-05-06 21:48:47