访问兄弟控件的ViewModel

时间:2011-11-24 23:00:52

标签: wpf ms-access user-controls viewmodel siblings

我知道有一些类似的线程,但我仍然不确定最佳实现。

代码应该是自我解释的 - 检查那里的评论。如何最好地访问该VIewModel。

部分:FontSearchBox是一个没有ViewModel的UserControl - 它只包含一个用于搜索的TextBox,需要执行该命令。

谢谢并感谢。

<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>

1 个答案:

答案 0 :(得分:1)

如果你使用的是MVVMLight,你可以使用Event to Command作为....

你的UserControl <vw:FontTreeView />中的

你必须拥有TextBox所以在TextBox Xaml中你必须写

的Xaml

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

要了解有关别名的详情,请参阅this链接。它还演示了如何将事件参数传递给ViewModel ....但是你可能没有注意到它,所以你可以跳过它......

如果TextBox是outsite fontTreeViewControl ....那么,

<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>

这可能对你有帮助.... :)