2011-05-13 63 views
0

我有一个WPF 3.5 MVVVM应用程序,它在ScrollViewer中有一个TextBlock。我希望能够在文本块中有新行时调用控件的LineUp/LineDown方法。调用LineUp等MVVM模式中的ScrollViewer Usercontrol的方法

如何在不违反任何MVVM原则的情况下实现此目的?

由于提前,

萨蒂亚

  <Border BorderThickness="1" BorderBrush="Gray" CornerRadius="1" Margin="2" Grid.Row="0" Grid.Column="3" Grid.RowSpan="2"> 
       <ScrollViewer Name="Scroll" VerticalScrollBarVisibility="Auto" MinWidth="120" Height="80" 
           CanContentScroll="True" 
           > 
        <TextBlock TextWrapping="WrapWithOverflow" Padding="5" FontSize="10" Text="{Binding Path=GetScrollLogMessage}" DockPanel.Dock="Left" /> 
       </ScrollViewer> 
      </Border> 
+0

更为通用:如何在MVVM中处理任何控件的任何方法?在按钮的情况下,可以使用'Command'来处理。 – 2011-05-16 18:05:01

回答

0

在视图模型中引发事件,并在视图的代码隐藏中处理事件。

+0

Isnt是否违背MVVM处理视图代码中的事件?你可以请一些示例代码? – 2011-05-16 18:01:16

+0

这并不违反MVVM。视图模型不知道视图的任何内容,只知道它正在引发一个事件。您仍然可以实例化并测试视图模型,而无需实例化视图,这是您处理两者之间关注点分离程度的严峻考验。 – 2011-05-16 18:07:24

+0

感谢您的输入。我在这里看到一个类似的问题:http://stackoverflow.com/questions/3705250/calling-a-method-of-a-usercontrol-in-mvvm。这有点不同吗?对不起,如果我听起来很愚蠢.. :) – 2011-05-16 18:15:09

0

可以执行ScrollViewer.scrollToBottom()时textblock.textChanged事件触发。

+0

但是我在哪里执行该方法?在视图的代码背后? Doenst MVVM意味着没有代码隐藏? – 2011-05-16 18:02:33

+0

MVVM意味着分离关注点。将文本块滚动到视图中是布局级别的问题。它与对齐相似:您可以在视图模型中实现对齐属性,然后将其绑定到视图中的Horizo​​ntalAlignment属性;视图模型显示“我想要这种对齐方式”,但视图实际上在属性更改时管理控件的对齐状态。 – 2011-05-16 18:14:29