我想弄清楚的兩件事情是,如何在用戶控件的可見性發生更改時傳遞觸發器並將可見性值作爲參數傳遞。使用交互觸發器調用可見性更改方法WPF
無論出於何種原因,觸發器似乎沒有被觸發。我剛剛在ControlVisible參數中添加了一些內容,以顯示我想要發生的情況,當測試它不在那裏時,並且在可見性發生變化時只需要在其中添加一個消息框,就像在註釋掉的方法中那樣。
我使用4.0和Visual Studio 2010
主窗口視圖包含用戶控制
<Window x:Class="bt.MainWindow"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:vm="clr-namespace:bt"
xmlns:ctrls="clr-namespace:bt.Controls"
xmlns:i="clr-namespace:System.Windows.Interactivity;assembly=System.Windows.Interactivity"
xmlns:ei="clr-namespace:Microsoft.Expression.Interactivity.Core;assembly=Microsoft.Expression.Interactions"
mc:Ignorable="d">
<Grid>
<ctrls:Login Visibility="{Binding DataContext.Vis,RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=Window},Converter={StaticResource BooleanToVisibilityConverter}}" >
<i:Interaction.Triggers>
<i:EventTrigger EventName="IsVisibleChanged">
<ei:CallMethodAction MethodName="VisibleTrigger" />
</i:EventTrigger>
</i:Interaction.Triggers>
</ctrls:Login>
</Grid>
</Window>
用戶控件視圖模型:
namespace bt.Controls
{
class LoginViewModel
{
public LoginViewModel()
{
}
public void VisibleTrigger(bool ControlVisible)
{
if (ControlVisible)
{
MessageBox.Show("Start timer");
}
else
{
MessageBox.Show("Stop timer");
}
}
//public void VisibleTrigger()
//{
// MessageBox.Show("Changed");
//}
}
}
還沒有試圖確定,但我認爲沒關係。你試過了嗎? – har07
yeap,它不會失敗,但它無法找到方法......沒關係,實現了ICommand,它的工作原理,謝謝! – Hank