2011-11-24 3 views
-1

비슷한 스레드가 있음을 알고 있지만 여전히 최상의 구현을 확신 할 수 없습니다.형제 컨트롤의 ViewModel에 액세스

코드는 자체 설명이어야합니다. 주석을 확인하십시오. 해당 VIewModel에 액세스하는 가장 좋은 방법.

부분 : FontSearchBox는 ViewModel이없는 UserControl입니다. - 명령을 실행할 필요가있는 것을 검색하기위한 TextBox 만 보유하고 있습니다.

감사합니다. 당신이 텍스트 상자 XAML에 TextBox 그래서 가지고해야 <vw:FontTreeView /> 당신의 UserControl에서

<Grid> 
    <Grid.RowDefinitions> 
     <RowDefinition Height="35" /> 
     <RowDefinition Height="90" /> 
     <RowDefinition Height="*" /> 
    </Grid.RowDefinitions> 

    <part:MainWindowControls Grid.Row="0" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" /> 

    <Grid Grid.Row="1"> 
     <Grid.ColumnDefinitions> 
      <ColumnDefinition Width="200" /> 
      <ColumnDefinition Width="*" /> 
     </Grid.ColumnDefinitions> 
     <Image Source="/Typesee;component/Resources/window_logo.png" Width="156" Height="45" Grid.Column="0" VerticalAlignment="Top" RenderOptions.BitmapScalingMode="NearestNeighbor" /> 

     <!-- THIS TEXTBOX NEEDS TO CALL A COMMAND (SearchCommand.Execute(string)) Which resides in the fontTreeViewControl's ViewModel (FontTreeViewModel) --> 
     <part:FontSearchBox Grid.Column="1" HorizontalAlignment="Right" VerticalAlignment="Bottom" Margin="0,0,12,10" Width="250" DataContext="{Binding ElementName=fontTreeViewControl, Path=DataContext}" /> 
    </Grid> 

    <vw:FontTreeView x:Name="fontTreeViewControl" Grid.Row="2" VerticalAlignment="Stretch" HorizontalAlignment="Stretch" /> 

</Grid> 
+0

이 텍스트 상자에 명령이 필요합니까? Textbox가 어떻게 명령을 호출 할 수 있습니까? 'part : FontSearchBox'의 일부 속성을'fontTreeViewControl의 ViewModel'에 바인딩하고 싶습니까? – sll

+0

코드에서 textchanged와 같은 이벤트에 대해 명령을 호출하려고합니다. AttachedProperty를 만들고이를 xaml에서 바인드해야합니까? –

답변

1

당신이 MVVMLight를 사용하여 SRE 경우, 당신은에 대한 명령하는 이벤트를 사용할 수 있습니다 ....

당신은

를 작성해야 하여 별칭 this 링크를 참조에 대한

XAML

<i:Interaction.Triggers> 
    <i:EventTrigger EventName="TextChanged"> 
     <Commands:EventToCommand Command="{Binding Path=TextChangedCommand}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 

더 알고. 또한 텍스트 상자가 다음 .... fontTreeViewControl outsite 경우, ...

당신의 ViewModel에 이벤트 인수를 전달하는 ....하지만 당신은 그래서 당신이 그것을 건너 뛸 수 MEED하지 않을 수 있습니다 방법을 보여줍니다

<StackPanel DataContext={Binding Path=DataContext,ElementName=fontTreeViewControl}> 
    <TextBox > 
    <i:Interaction.Triggers> 
    <i:EventTrigger EventName="TextChanged"> 
     <Commands:EventToCommand Command="{Binding Path=TextChangedCommand}"/> 
    </i:EventTrigger> 
</i:Interaction.Triggers> 
    </TextBox> 
</StackPanel> 

이것은 도움이 될 것입니다 .... :)

+0

감사합니다. 불행히도 텍스트 상자는 fontreeview 컨트롤 외부에 있지만 명령과 기능은 내부에 있습니다. MVVMLight를 (를) 사용 하시겠습니까? 다음 프로젝트에 사용할 계획이었습니다. –

+0

@infensus 예 ... 사용하기가 정말 좋고 사용하기 쉽습니다 ... 문제와 관련하여 .... 편집 된 답변보기 – Ankesh

관련 문제