我已经在这个头上敲了好几个小时,希望有人能指出我正确的方向。
我的 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/