我在View-B中从Viewmodel-B更新Viewmodel-A中的属性。在调用属性更新的同一函数中,视图切换到View-A;我在private async Task RepopulateFieldValues
上设置的断点没有被命中。
因此,当我在View-B中单击按钮时,我看到Viewmodel-B中的所有相关断点都被命中,我的视图切换到View-A,我看到ICommand上的断点被命中,仅此而已。然后,如果我将视图切换回任何其他视图,我看到Tasks上的断点被命中。我知道我有一些错误。
这是我在Viewmodel-A中的属性,通过Viewmodel-B更新:
private int _ApptSelected;
public int ApptSelected {
get { return _ApptSelected; }
set {
_ApptSelected = (MainViewModel.ApptID.Count > 0) ? MainViewModel.ApptID[0] : 0;
}
}
下面是我的ICommand:
public ICommand RepopulateFields_Command => new AsyncRelayCommand(RepopulateFieldValues);
这是我能想到的触发RepopulateFields_Command
的唯一方法:
<TextBox x:Name="HackProperty"
Text="{Binding ApptSelected,
Mode=OneWay,
NotifyOnSourceUpdated=True,
UpdateSourceTrigger=PropertyChanged}" >
<behaviors:Interaction.Triggers>
<behaviors:EventTrigger EventName="TextChanged">
<behaviors:InvokeCommandAction Command="{Binding RepopulateFields_Command}" />
</behaviors:EventTrigger>
</behaviors:Interaction.Triggers>
</TextBox>
这就是我试图运行的“级联”任务:
private async Task RepopulateFieldValues()
{
if (ApptSelected > 0)
{
Console.WriteLine("ApptSelected: " + ApptSelected);
await RetrieveEditInfo(ApptSelected);
}
}
这是Viewmodel-B中的相关代码(用于切换视图)
public void EditSelection_Clicked(object obj)
{
if(Messaging.AskQuestion("Do you want to edit this appointment?"))
{
SelectedVM = AppointmentsViewModel.ApptTabItems[1];
AppointmentsViewModel.ApptTabItems[1].IsSelected = true;
ApptSelectedID = ApptIDSelected.ApptID;
Messaging.ShowAlert("ID: " + ApptSelectedID);
MainViewModel.ApptID.Clear();
MainViewModel.ApptID.Add(ApptSelectedID);
}
}
1条答案
按热度按时间zfycwa2u1#
您使用的
EventTrigger
只能处理路由事件,而TextChanged
不是路由事件,这意味着当您在TextBox
中键入内容时,您的命令不会被调用。但是如果您只是想触发并忽略该命令,则应该能够直接在绑定到
TextBox
的ApptSelected
的setter中执行它:那么您根本不需要为
TextChanged
事件操心。