2012-04-09 2 views
2

예를 들어 사용자가 입력 할 수 있기를 원합니다. 310312 및 datepicker의 text 속성을 31/03/12로 자동 업데이트합니다. datepicker를 뷰 모델 'Date'속성에 바인딩했습니다.소스 업데이트를 바인딩 한 후 Wpf DatePicker 텍스트가 업데이트되지 않습니다.

WPF4.0에서는 바인딩이 자동으로 세트를 수행합니다 (INotifyPropertyChanged가 필요 없음). 이것은 아래의 코드에서 발생하지만 'get'날짜 필드 값이 올바른 '31/03/12 '이지만 datepicker 텍스트 속성이 업데이트되지 않고 310312 (NB UpdateSourceTrigger = PropertyChanged)로 유지됩니다.

텍스트 박스의 속성이 변화를 않습니다 (예를 들어, 설정 코드, 미도, 대문자로 변환 곳) 정말 이것이 이유에 대해 약간의 조언을 부탁드립니다

.

 <Grid> 
     <DatePicker Text="{Binding Path=Date,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" 
      Height="25" HorizontalAlignment="Left" Name="datePicker1"/> 
     <TextBox Text="{Binding Path=State,Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="23" HorizontalAlignment="Left" Name="textBox1" /> 
    </Grid> 

     private string date; 
     public string Date 
     { 
      get 
      { 
       return date; 
      } 
      set 
      { 
       if (value != null) 
       { 
        Regex abbreviatedDateFormat = new Regex(@"\A\d{6}\Z"); 
        if (abbreviatedDateFormat.IsMatch(value)) 
        { 
         value = value.Insert(2, "/"); 
         value = value.Insert(5, "/"); 
        } 
       } 

       date = value;      
      } 
     } 
+0

같은 것을 달성하고 싶습니다. 어떤 해결책을 찾았습니까? – mosquito87

답변

0

이 명확한 답변을하지 않습니다,하지만 난 코드를 게시하고 싶었다과 포맷, 그래서 내가 여기에 위치.

이것은 내가 흥미로웠다. 그래서 나는 간단한 테스트 프로젝트로 놀아왔다.

은 내가 알았어 야하는 것은의 입력

MainWindow.xaml

<Window x:Class="datepickertest.MainWindow" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    Title="MainWindow" Height="350" Width="525" x:Name="Me"> 
    <StackPanel> 
     <DatePicker Name="datePicker" Text="{Binding ElementName=Me, Path=Date, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" /> 

     <TextBlock Text="{Binding ElementName=datePicker, Path=Text}"/> 
     <TextBlock Text="{Binding ElementName=datePicker, Path=SelectedDate}"/> 
     <TextBlock Text="{Binding ElementName=Me, Path=Date}"/> 
    </StackPanel> 
</Window> 

MainWindow.xaml.cs를

public partial class MainWindow : Window 
{ 
    public MainWindow() 
    { 
    Date = "030912"; 
    InitializeComponent();   
    } 

    private string date; 
    public string Date 
    { 
    get { return date; } 
    set 
     { 
      if (value != null) 
      { 
       Regex abbreviatedDateFormat = new Regex(@"\A\d{6}\Z"); 
       if (abbreviatedDateFormat.IsMatch(value)) 
       { 
        value = value.Insert(2, "/"); 
        value = value.Insert(5, "/"); 
       } 
      } 

      date = value;      
     } 
    } 

} : 여기 내 코드입니다 DateTime 컨트롤은 '/'문자로 구분되지 않으면 날짜 형식을 인식하지 못합니다. Text 속성을 TextBlock에 바인딩하고 TextBlock 문자를 문자로 업데이트하는 것을 볼 수 있습니다. 정규식이 일치하지만 실제 입력 상자 값이 유효한 날짜가 제공 될 때까지 (UpdateSourceTrigger에 관계없이) 업데이트되지 않으면 슬래시가 발생합니다. 엔터 키가 눌러집니다. 이것은 나에게 이것이 통제의 바람직한 행동 일지 모른다.

컨트롤의 형식이 현재 스레드 문화 정보에서 벗어나지 만이 링크 http://social.msdn.microsoft.com/Forums/en/wpf/thread/f065bcda-a5df-4fd1-bd29-3d0186245c8c을 따라 가면서 나는 여전히 당신을 위해 작동하는 솔루션을 찾을 수 없습니다.

+0

이것을 보아 주셔서 고마워요. datepicker에 대한 바인딩 업데이트를 허용하지 않는 이유를 볼 수 없습니다. 바인딩 후에 뷰 모델 값을 다시 읽습니다. 바인딩이 datepicker에서 변경된 값을 설정하려고 시도하지만 datepicker가 공을 재생하는 것을 거부합니다. 디자인 상으로는 이상하게 보입니다. – sturdytree

+0

동의합니다. Text 속성이 생성 중에 바인딩되어 있고 날짜 선택기 입력이 그것을 집어 넣는 값을 설정할 수 있다고 생각한다면 set/get 콤보를 사용할 때 비슷하게 동작합니다. – Josh

관련 문제