2013-07-24 1 views
0

메인 winodw에 상태 표시 줄 컨트롤이 있습니다. 나는 메인 윈도우에 배치 된 사용자 컨트롤을 가지고있다. 나의 사용자는 버튼을 가지고있다.wpf에서 사용자 정의 컨트롤에서 주 컨트롤로 데이터를 전달하는 방법

내가 사용자 정의 컨트롤에서 단추를 클릭하면 주 창 상태 표시 줄을 업데이트해야한다고 말합니다.

MVVM 패턴을 따르고 있습니다. 나는 이것을 어떻게 얻는 지 잘 모릅니다. 나는 wpf에서 초보자입니다.

답변

0

사용자 정의 컨트롤의 DataContext (viewmodel)를 주 창과 동일하게 설정할 수 있습니다. viewModel에 속성을 유지하고 사용자 정의 컨트롤에 해당 속성을 바인딩하십시오. 따라서 컨트롤이 변경 될 때마다 Main에서 사용할 수있는 View Model에서 속성이 자동으로 업데이트됩니다.

+0

을 -Include mvvm 패턴에 의해 만들어지면 문제가 발생합니다 .. – loop

0

나는 usercontrol이 자체 viewmodel과 함께 작동하는 것이 좋습니다. 주 창에는 상태 표시 줄 메신저 서비스를 초기화하는 역할을하는 주 컨트롤러가 있으며 사용자 제어보기 모델은 해당 서비스를 사용합니다.

사용자 정의 컨트롤의 뷰 모델은 RelayCommand를 통해 단추의 동작에 바인딩되며 동작을 실행하면 상태 표시 줄 서비스를 사용하여 상태를 업데이트합니다.

메인 창의 상태 표시 줄을 사용하여 응용 프로그램의 여러 사용자 컨트롤/페이지에서 작업 할 수 있습니다.

2

종속성 속성을 사용하여 주 제어에 UserControl을 보내야합니다.

예 : 기본 창에있는 텍스트 블록의 텍스트를 버튼에서 변경하려는 경우 USerControl에있는을 클릭하십시오.

가있는 UserControl에서

public static readonly DependencyProperty TextProperty = DependencyProperty.Register("WriteText", typeof(string), typeof(UserControlnameSpace)) //Write Namespace of your UserControl where I mentioned 

     public string WriteText 
     { 
      get { return (bool)GetValue(TextProperty); } 
      set 
      { 
       SetValue(TextProperty , value); 
      } 
     } 

ButtonClick 이벤트 현재 귀하의 UserControl이 DependencyProperty를 확인

당신은 변화를 반영하기 위해 TextBlock의 텍스트 특성에 DependencyProperty에 바인딩 할 필요가 당신의 UserControl은 INotifyPropertyChange를 구현해야합니다

public void Button_Click(object sender, RoutedEventArgs e) 
     { 
WriteText="Hie"; //Write what you want to display on MainWindow. 
} 

뷰 모델 : -

private string _txtContent; 

     public string TxtContent 
     { 
      get 
      { 
       return _txtContent; 
      } 

      set 
      { 
       _txtContent = value; 
       RaisePropertyChanged("TxtContent"); 
      } 
     } 

주 창 : -

<TextBlock Text="{Binding TxtContent,Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}"/> 

당신이 당신의 UserControl을 포함하고 있습니다 : 귀하의 경우 귀하의 경우 UserControl을에서이 속성

<UserControl WriteText={Binding TxtContent Mode=TwoWay,UpdateSourceTrigger=PropertyChanged}" /> 
+0

고마워요. 다시 사용할 수있는 mesome 코드 샘플을 제공해 주시겠습니까? –

+0

나는 내 대답을 업데이 트했습니다. 이것 좀 봐 ... :) – Vishal