2014-04-22 4 views
0

DB에서 채워지는 텍스트 상자가 있습니다. DB 값은 StringFormat으로 인해 발생하는 문자열 형식이어야합니다. 이 값은 사용자가 변경할 수 있습니다. 사용자가 다른 형식으로 값을 편집하면 String Formatter가 형식을 다시 지정하지 않아야합니다.조건부로 wpf 텍스트 상자에 StringFormat을 적용하는 방법

어떻게하면됩니까?

<TextBox x:Name="txtStartDate" 
     Height="24" Width="80" Padding="0" MaxLength="10" 
     Text="{Binding Path=SelectedDate, StringFormat='ddd, ddMMM', 
     RelativeSource={RelativeSource AncestorType={x:Type DatePicker}}}" 
     /> 

텍스트 상자는 실제 프로젝트의 사용자 지정 컨트롤입니다.

예. DB는 5 월 30 일로 값을 보내고 30 분으로 변환되어 텍스트 상자에 표시됩니다. 이는 예상대로입니다. 이제 사용자가 May30으로 다시 변경하면 변환해서는 안되며 May30이 표시되어야합니다. 실제로 일어나고있는 값은 30May로 다시 포맷되므로 사용자가 값을 터치하면 포맷을 방지하기를 원합니다.

답변

0

WPF를 작성할 때는 항상/UserControl 및/또는 Window 초를 필요로하는 정확한 데이터로 제공해야합니다. 요구 사항에 따라이 문제를 단순화하기 위해 몇 가지 추가 속성을 추가 할 것입니다. 하나의 DateTime 속성과 string 속성 및 bool 속성 중 하나가 필요합니다. DateTime 속성은 분명히 DatePicker에서 날짜를 표시하며 string은 표시된 값을 출력하고 bool 속성은 날짜 값에 문자열 형식을 적용할지 여부를 지정합니다. 이 같은 것을 시도 할 수 :

public DateTime Date // Bind with DatePicker 
{ 
    get { return date; } 
    set 
    { 
     date = value; 
     NotifyPropertyChanged("Date"); 
     IsFormatted = YourLogicHere(); 
    } 
} 

public bool IsFormatted { get; set; } 

public string DateValue 
{ 
    get { return IsFormatted ? Date.ToString("ddd, ddMMM") : Date.ToString(); } 
} 

는 그래서 DateValue 속성이 UI에 표시되는 내용과는 다음 중 하나를 출력 기본 DateTime 값, 또는 IsFormatted 속성 값에 의존 형식이 지정된 값. 기본 아이디어는 요구 사항에 따라 속성을 true 또는 false으로 설정하는 것입니다.

사용자가 값을 변경하는 경우 종속성이 있다고 생각합니다. 따라서 사용자가 값을 변경하면이 값을 true으로 설정하면 서식없는 날짜 만 출력됩니다. 요구 사항을 구현하기 위해 다른 속성을 추가하거나이 예제의 내용을 변경해야 할 수도 있습니다. 그러나 지금까지 생각을해야하고 여기에서 완성 할 수있을 것이라고 확신합니다.

+0

당신이 옳은대로 내 대답을 삭제했습니다. 그것은 더 많은 제안이었습니다. 나는 대답으로 시작했고, 나는 그 질문을 다시 읽고 생각이 바뀌면서 덜 어려워졌습니다. 그러나 작성자를위한 솔루션을 찾으려고 할 때 귀하의 솔루션이 실제로 문제를 해결하는지 확신 할 수 없습니다. 이 문제는 일단 편집이 완료되면 사용자가 입력 한 날짜 형식을 유지하는 것으로 보이지만이 솔루션은 단순히 두 가지 형식 중 하나를 반환하며 사용자가 실제로 날짜를 입력하는 방법을 고려하지 않습니다. 어떻게 생각해? 어쩌면이 문제를 잘못 해석하고있는 것일 수 있습니다. – Sam

+0

사용자가 문자열 형식을 입력하지 않을 것이라고 생각합니다. 잘못된 것일 수 있습니다. – Sheridan

관련 문제