2017-11-10 5 views
-1

WPF에서 사용자 지정 시간 선택기 UserControl을 만들었습니다. 그리고 바인딩을 MainWindow 클래스에서 UserControl 클래스로 가져 왔지만 UserControl 클래스에서 메인 클래스로는 가져 오지 못했습니다. 여기 내 MainWindow 클래스입니다.WPF 사용자 지정 UserControl 양방향 바인딩

나는이 같은 MainWindow.axml에 TimePicker UserControl을 추가했습니다.

<local:TimePicker VerticalAlignment="Top" Hour="{Binding Hour}" Minutes="{Binding Minutes}" Grid.Row="0" Grid.Column="0" /> 

TimePicker 클래스와 .xaml 파일의 코드가 요청되는 경우에 그래서 나는 단지 여기에 게시됩니다 매우 깁니다. 위의 요소와 MainWindow 클래스를 약간 변경해야한다고 생각합니다.

AddTimerBtnClick(object sender, RoutedEventArgs e) 메서드에서 TimePicker UserControl의 속성을 가져 와서 목록에 추가하려고합니다.

여기 내 맞춤 TimePicker 클래스입니다.

public partial class TimePicker : UserControl 
{ 

    #region Label DP 
    public object Hour 
    { 
     get { return (object)GetValue(HourProperty); } 
     set { SetValue(HourProperty, value); } 
    } 

    public static readonly DependencyProperty HourProperty = 
     DependencyProperty.Register("Hour", typeof(object), 
      typeof(TimePicker), new PropertyMetadata(null)); 

    #endregion 

    #region Label DP 
    public object Minutes 
    { 
     get { return (object)GetValue(MinutesProperty); } 
     set { SetValue(MinutesProperty, value); } 
    } 

    public static readonly DependencyProperty MinutesProperty = 
     DependencyProperty.Register("Minutes", typeof(object), 
      typeof(TimePicker), new PropertyMetadata(null)); 

    #endregion 

    public TimePicker() 
    { 
     Hour = 00; 
     Minutes = 00; 
     InitializeComponent(); 
    } 
    ... 
} 
+0

투표를하기 전에 투표를하거나 투표를 마감하십시오. 초보자도 어려울 수 있습니다. 나는 그것을 향상 시키려고 노력할 수있다. – LogicDev

+0

'AddTimerBtnClick' 메소드의 목적은 무엇입니까? –

+0

나는 서비스가 뭔가를하는 날까지 몇 시간을 제어 할 데스크톱 응용 프로그램을 만들고 있습니다. 버튼을 클릭하면 TimePicker UserControl에서 시간을 가져와 사용할 서비스 목록에 추가합니다. – LogicDev

답변

0

당신은 int 대신 object으로 종속성 속성을 등록해야합니다 (대신 null의 기본값 인 0을 사용)도 또한 바인딩에 Mode=TwoWay를 추가 int

public int Hour 
{ 
    get { return (int)GetValue(HourProperty); } 
    set { SetValue(HourProperty, value); } 
} 

public static readonly DependencyProperty HourProperty = 
    DependencyProperty.Register(nameof(Hour), typeof(int), 
     typeof(TimePicker), new PropertyMetadata(0)); 

를 사용하는 C 번호 속성을 대체 양쪽에서 값을 업데이트하려는 경우

+0

모든 개체를 int로 바꿨습니다. 당신은 내가 이것을 좋아해야한다는 것을 의미합니다. Grid.Row = "0"Grid.Column = "0"/> LogicDev

+0

와우! 그것은 실제로 효과가 있었다! 나는 그것이 다른 질문을 보는 많은 코드가 될 것이라고 생각했다. 그래서'{Binding Path = Minutes, Mode = TwoWay}'를 UserControl 엘리먼트에 추가하면 값이'MainWindow' DataContext에 바인드됩니까? – LogicDev

+0

예. 그러나'AddTimerBtnClick' 메소드의 의미는 분명하지 않습니다. –