簡體   English   中英

命令參數中的綁定屬性(數據網格)

[英]Binding Property in command parameter (datagrid)

我有一個數據網格,列出了可觀察集合中存在的信息。 到目前為止,一切正常。

然后我想添加一個停止命令,其中 Name 屬性作為參數,但是當我寫 CommandParameter= {Binding Name} 時,我的按鈕被禁用。 我嘗試使用隨機字符串設置 CommandParameter 並且可以正常工作,因此問題來自綁定。

        <DataGrid.Columns>


            <DataGridTextColumn Header="Name" Binding="{ Binding Name }"/>
            <DataGridTextColumn Header="Source" Binding="{ Binding Source }"/>
            <DataGridTextColumn Header="Target" Binding="{ Binding Target }"/>

            <DataGridTemplateColumn Header="Stop">
                <DataGridTemplateColumn.CellTemplate>
                    <DataTemplate>
                        <Button Content="Stop" 
                                Command="{ Binding DataContext.StopCommand, RelativeSource = { RelativeSource FindAncestor,AncestorType={ x:Type DataGrid } } }"                         
                                CommandParameter="{ Binding Name }"/>
                    </DataTemplate>
                </DataGridTemplateColumn.CellTemplate>
            </DataGridTemplateColumn>

謝謝 !

我認為這個問題出在您的代碼隱藏代碼中。 我為您創建了一個示例,在此示例中,我使用您的 XAML 代碼。

在此示例中,我使用的是Prism.WPF NuGet package。

XAML 代碼:

<DataGrid ItemsSource="{Binding Items}" AutoGenerateColumns="False">
    <DataGrid.Columns>
        <DataGridTextColumn Header="Name" Binding="{Binding Name}"/>
        <DataGridTextColumn Header="Source" Binding="{Binding Source}"/>
        <DataGridTextColumn Header="Target" Binding="{Binding Target}"/>
        <DataGridTemplateColumn Header="Stop">
            <DataGridTemplateColumn.CellTemplate>
                <DataTemplate>
                    <Button Content="Stop" 
                            Command="{Binding DataContext.StopCommand, RelativeSource={RelativeSource FindAncestor,AncestorType={x:Type DataGrid}}}"                         
                            CommandParameter="{Binding Name}"/>
                </DataTemplate>
            </DataGridTemplateColumn.CellTemplate>
        </DataGridTemplateColumn>
        </DataGrid.Columns>
</DataGrid>

代碼隱藏:

public partial class MainWindow : MetroWindow
{
    public MainWindow()
    {
        InitializeComponent();
        DataContext = new FooViewModel();
    }
}

public class Foo
{
    public string Name { get; set; }
}

public class FooViewModel : BindableBase
{
    public FooViewModel()
    {
        for (int i = 0; i < 100; i++) Items.Add(new Foo() { Name = $"name_{i}" });
        StopCommand = new DelegateCommand<string>(OnStopCommand);
    }

    public ICommand StopCommand { get; private set; }
    public ObservableCollection<Foo> Items { get; set; } = new ObservableCollection<Foo>();

    private void OnStopCommand(string name) => Console.WriteLine(name);
}

暫無
暫無

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

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