MVVM 응용 프로그램에서 작업 중입니다. & 광택을 내기 시작했습니다. & 광택 기능이 있습니다. 내 페이지 왼쪽에서 Silverlight MVVM - Button Enable & Visibility 속성
, 나는 이러한 값을 표시하고있다 :DateActivated
DateCompleted
DateTrialClosed
DateAccountingClosed
DB를의 날짜가 있다면, 나는 TextBlock의를 표시하고있다. 그렇지 않은 경우 "작업 주문 활성화", "작업 주문 완료"등의 버튼을 사용자에게 표시하고 있습니다.
나는이 각각의 가시성을 바인딩합니다 (4 textblock, 4 버튼) 컨트롤 ViewModel
Windows.Visibility
내 고유 한 속성을 제어합니다. 내 설정자 SelectedWorkOrder
에서 SelectedWorkOrder.DateActivated
속성 (예 :)의 현재 값을 평가하고 그에 따라 가시성 속성을 설정합니다. 이것은 약간 장황하지만 예상대로 작동합니다.
내 다음 단계는 첫 번째 이후 눈에 보이는 버튼 (논리는 간단하다 .... 버튼 1을 클릭 할 때까지 버튼 2를 클릭 할 수 모두 1 & 2까지왔다 버튼 3을 클릭 할 수 없습니다 비활성화하는 것입니다 클릭). 이 방법을 구현하는 가장 좋은 방법은 무엇인지 모르겠습니다. 참고로이 프로젝트에서 이미 프로젝트에 boolToVisibility 값 변환기가 있습니다. 지금 구현하고있는 것과 다를 수 있습니다 (아래 VM 코드 참조).
<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 코드 :
현재 나는 내 XAML이이
if (_SelectedWorkOrder.DateActivated.ToShortDateString() != "1/1/0001")
{
ActivatedTextBlockVisibility = Visibility.Visible;
ActivatedButtonVisibility = Visibility.Collapsed;
}
else
{
ActivatedTextBlockVisibility = Visibility.Collapsed;
ActivatedButtonVisibility = Visibility.Visible;
}
(나는 새로운 DateTime
경우를 인스턴스화하고있어 같은 날짜 내 데이터베이스 액세스 레이어에서 1/1/0001
로 설정 Is DBNull.Value = true
)
내가 강력하게 사용하는 것이 좋습니다 ['DateTime.MinValue'] (http://msdn.microsoft.com/en-us/library/system.datetime.minvalue.aspx) DateActivated를 문자열로 변환하고 "1/1/0001"과 비교하는 것보다 –