[英]problem with wpf command not executing when button clicked
我在 WPF 應用程序中有以下 XAML 。 我想將按鈕綁定到視圖 model 中的ICommand
。 出於某種原因,我無法從我的視圖中看到該命令。 這是在用戶控件中。
<Grid>
<Grid.DataContext>
<Binding
x:Name="SettingsData"
Path="Data" />
</Grid.DataContext>
.
.
.
<DockPanel Grid.Column="1">
<Button x:Name="SaveButton"
DockPanel.Dock="Top"
Height="25"
HorizontalAlignment="Left"
Margin="70 0 0 0"
Command="{Binding Path=SaveData}"
>Save Changes</Button>
</DockPanel>
</Grid>
這是我的 ICommand object -
public ICommand SaveData
{
get
{
if (_saveData == null)
{
_saveData = new RelayCommand(
param => this.saveData(),
param => true
);
}
return _saveData ;
}
}
有誰知道為什么我不能綁定到這個命令?
感謝您的任何想法....
看起來您正在將Grid
的DataContext
設置為 ViewModel(或對象)的Data
屬性。 如果 Data 屬性公開的 object 不提供SaveData
命令,那么您將遇到您所描述的問題。 請記住, DataContext
是從父級繼承的。
如果您要求以這種方式設置DataContext
,並且仍然需要按鈕來引用父DataContext
,則一種選擇是使用 RelativeSource 指向具有 ViewModel 作為DataContext
的元素。
在 WPF 中,您還可以選擇執行這些命令 static 並使用{x:Static}
標記擴展來訪問它。
希望有幫助。
編輯:如果您的<Grid>
包含在<UserControl>
中,這是一個示例。
<Button Command="{Binding Path=DataContext.SaveData,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type UserControl}}}" ... />
另外,我不知道你的完整 XAML 是什么樣的,但我懷疑這可以通過刪除Grid
上的DataContext
和ItemsControl
上的綁定數據來大大簡化(或者你用來顯示對象列表的任何東西) .
查看下面的錯誤,看起來 DockPanel 上的 DataContext 綁定到某種列表:
我在 output window 中看到了這一點 - BindingExpression 路徑錯誤:在 'object' ''List`1' 上找不到 'SaveData' 屬性
如果 DataContext 不在頂層,請覆蓋 Binding 中的 Source 屬性
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.