簡體   English   中英

單擊按鈕時未執行 wpf 命令的問題

[英]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 ;
    }
}

有誰知道為什么我不能綁定到這個命令?

感謝您的任何想法....

看起來您正在將GridDataContext設置為 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上的DataContextItemsControl上的綁定數據來大大簡化(或者你用來顯示對象列表的任何東西) .

查看下面的錯誤,看起來 DockPanel 上的 DataContext 綁定到某種列表:

我在 output window 中看到了這一點 - BindingExpression 路徑錯誤:在 'object' ''List`1' 上找不到 'SaveData' 屬性

如果 DataContext 不在頂層,請覆蓋 Binding 中的 Source 屬性

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM