silverlight - Silverlight-如何基于 View 中的属性调用命令

标签 silverlight mvvm icommand

我已经在这个头上敲了好几个小时,希望有人能指出我正确的方向。

我的 View 中有一个按钮,其中包含单击事件和附加的命令。 click事件根据当前状态将网格行的可见性设置为折叠或可见。

a

<Grid>
    <Grid.RowDefinitions>
        <RowDefinition Height="120" />
        <RowDefinition x:Name="DetailHolder" Height="*" />
    </Grid.RowDefinitions>
    <Grid x:Name="LayoutRoot">
        <Grid.ColumnDefinitions>
            <ColumnDefinition Width="92.915" />
            <ColumnDefinition />
        </Grid.ColumnDefinitions>
        <Button x:Name="DetailButton"
                Grid.Column="1"
                Width="107"
                Height="23"
                Margin="196,94,0,0"
                HorizontalAlignment="Left"
                VerticalAlignment="Top"
                Click= "MoreDetail_Click"
                Command="{Binding GetCFSDetailCommand}"
                Content="View Details [+]" >
            <Button.DataContext>
                <mdc:SearchViewModel/>
            </Button.DataContext>
        </Button>
    </Grid>
    <Grid x:Name="MyDetail"
          Grid.Row="1"
          MinHeight="150"
          Visibility="Collapsed">
        <TextBlock Text="My Hidden Data" />
    </Grid>
</Grid>

click命令调用一种方法,该方法测试MyDetail部分的当前视觉状态并将其展开或折叠

该命令从我的viewModel等调用GetCFSDetailCommand

卡住的地方是,我只想在 View 折叠时调用Command GetCFSDetailCommand。现在设置的方式是,每次单击按钮时都会触发命令。我不能使用ICommand CanExecute,因为我不想禁用该按钮。我将不胜感激如何实现这一目标的任何建议或想法。一种想法是测试后面事件代码中的可见性,然后基于该事件调用Command。如果这是正确的方法,我将非常感谢一个代码示例,因为我没有从事件中调用命令的运气。

提前致谢

最佳答案

在DataTrigger中设置Command属性

<Button x:Name="DetailButton" Content="View Details [+]">
    <Button.Style>
        <Style TargetType="{x:Type Button}">
            <Style.Triggers>
                <DataTrigger Binding="{Binding ElementName=MyDetail, Path=Visibility}"
                             Value="Collapsed">
                    <Setter Property="Command" Value="{Binding GetCFSDetailCommand}" />
                </DataTrigger>
            </Style.Triggers>
        </Style>
    </Button.Style>
<Button>

当MyDetail面板折叠时,将设置命令。否则,它是不受约束的,将不会发生任何事情。

关于silverlight - Silverlight-如何基于 View 中的属性调用命令,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6205917/

相关文章:

c# - 如何将 Nullable<Boolean> 值传递给 CommandParameter?

silverlight - 如何从 ViewModel 中关闭 Silverlight 子项?

silverlight - 使用 MVVM 隐藏 Silverlight DataGrid

silverlight - 从CollectionChanged事件更改集合

xaml - 与 DispatcherTimer 相关的绑定(bind)问题

wpf - 将相同类型的 View 模型列表绑定(bind)到 Caliburn.Micro 中的选项卡控件

mvvm - 为什么 ViewModel 不在 MVVM 中实现 ICommand

silverlight - 灯开关中的单元测试

c# - Xceed DataGrid 设置为行 :MultiSelect - How to bind selected row to its MVVM row data

c# - RelayCommand 的常见实现是否违反了 MVVM 模式?