프레젠테이션의 첫 번째 TextBox에 유효한 값이있을 때까지 비활성화하려는 DataGrid를 비롯한 여러 컨트롤이 있습니다. 그래서 부울 속성을 VM에 바인딩하고 xaml (아래)에 바인딩합니다.데이터 바인딩 및 포커스 조정
바인딩이 작동하지만 TextBox (MoneyToAllocate)에서 사용자를 '트래핑'하는 부작용이 있습니다.
아마도 TB 바인딩이 LostFocus이고 포커스를 이동하여 실제로 업데이트를 트리거 할 곳이 없기 때문일 수 있습니다. 이 문제를 해결하는 좋은 방법은 무엇입니까?
건배,
Berryl
뷰 모델
public bool HasMoneyToAllocate { get { return MoneyToAllocate.Amount > 0; } }
public Money MoneyToAllocate {
get { return _moneyToAllocate; }
set {
if (value.Amount < 0) return;
_moneyToAllocate = new Money(value.Amount, SelectedCurrency);
NotifyPropertyChanged(() => HasMoneyToAllocate);
}
}
보기
<TextBox Text="{Binding MoneyToAllocate, Converter={StaticResource moneyConverter}}" />
<DataGrid IsEnabled="{Binding HasMoneyToAllocate}" ...
편집 내가 업데이트하여 PropertyChanged을 시도했지만 조금 지저분 것을 추가해야
텍스트 상자의 값 변환기로 포맷해야합니다. 다른 아이디어?
최종 편집
나는 이전에하지 탭이 탭 정지를 할 수 중지했다 다른 컨트롤을시키는까지 상처 때문에 텍스트 상자가 갈 수있는 곳이 있었다. Phil은 문제를 가장 잘 이해하고 답을 얻습니다. 사용자가 입력 할 수있는 값의 범위 (.001에서 decimal.MaxValue)는 업/다운을 비실용적으로 만듭니다.
편집을 참조하십시오. – Berryl
확장 된 WPF 툴킷에서와 같이 DecimalUpDown 컨트롤을 사용하는 것은 어떻습니까? 컨트롤에 유효한 숫자가 항상 있어야하고 UI가 0보다 클 때는 나머지 UI를 사용하도록 설정하십시오. – Phil