我正在使用 MVVM 工具包中的 ObservableProperty 屬性,用于字串 SearchString,它具有 TextBlock.Text 屬性的系結。我想在 TextBlock 發生更改后啟動命令,因此我設定了更改通知的屬性。
視圖模型部分:
[ObservableProperty]
[NotifyCanExecuteChangedFor(nameof(UpdateSearchCommand))]
string searchString = string.Empty;
[RelayCommand]
async Task UpdateSearch()
{
MessageBox.Show("Hello");
await Task.CompletedTask;
}
查看部分:
<TextBox x:Name="txtSearch" Width="200" Height="30"
Grid.Row="0" Grid.Column="0"
HorizontalAlignment="Right"
VerticalAlignment="Center"
BorderThickness="0"
Margin="0 0 10 0"
Padding="0 5 0 0"
Text="{Binding SearchString}">
<TextBox.ToolTip>
<ToolTip Content="{Binding Loc[SearchNameOrDesc_TT]}"/>
</TextBox.ToolTip>
我不知道為什么,但是當我在 textBlock 中寫入內容時,該命令不會觸發。
有人對這種行為有一些經驗嗎?
我會很高興得到任何建議甚至提示。
謝謝
uj5u.com熱心網友回復:
您沒有將您的命令系結到您的視圖。首先,您需要了解系結的作業原理。
你沒有將你的命令系結到任何東西。相反,您只是通知 View 更新對 Command 的任何系結,這在這里沒有做任何事情,因為它沒有系結到任何東西。
如果你想通過SearchString屬性的系結來呼叫命令,你需要更新你的代碼,如下所示:
[ObservableProperty]
string searchString;
partial void OnSearchStringChanged(string value)
{
UpdateSearchCommand.Execute(null); //or pass value, if you need to
}
[RelayCommand]
void UpdateSearch()
{
MessageBox.Show("Hello");
}
注意:這不是一個理想的實作,只是一種根據我的理解來修復代碼的方法。
在使用 MVVM 代碼生成器等高級工具之前,您可能應該更加熟悉屬性系結和命令。
轉載請註明出處,本文鏈接:https://www.uj5u.com/ruanti/516387.html
上一篇:修改ObservableCollection時系結不起作用
下一篇:WPF視圖更改導致延遲
