DataGrid.RowDetailsTemplate出现问题,无法使用访问命令方法



xaml代码为:

<DockPanel>
    <DataGrid x:Name="Quote" AutoGenerateColumns="False">
        <DataGrid.Columns >
            <DataGridTextColumn      Header="Code" Binding="{Binding Code}"/>
            <DataGridTextColumn      Header="Name" Binding="{Binding Name}"/>
            <DataGridTextColumn      Header="Quantities" Binding="{Binding Quantities}"/>
            <DataGridTextColumn      Header="Price" Binding="{Binding Price}"/>
            <DataGridTextColumn      Header="Cost" Binding="{Binding Cost}"/>
            <DataGridCheckBoxColumn  Header="Done"   Binding="{Binding Done}"/>
        </DataGrid.Columns>
        <DataGrid.RowDetailsTemplate>
            <DataTemplate>
                <Border BorderThickness="0" Background="Beige" Padding="10">
                    <StackPanel Orientation="Horizontal">
                        <Button Command="{Binding Path=DataContext.Renew1Command, RelativeSource= {RelativeSource FindAncestor,AncestorType=DataGrid}}">Call Command</Button>                        
                    </StackPanel>
                </Border>
            </DataTemplate>
        </DataGrid.RowDetailsTemplate>
    </DataGrid>
</DockPanel>

模型为:

public class StockModel
{
    public event PropertyChangedEventHandler PropertyChanged;
    public void propChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propName));
        }
    }   
    private string code;
    public string Code
    {
        get { return code; }
        set
        {
            code = value;
            this.propChanged("Code");
        }
    }                    
    ....          
    private bool done;
    public bool Done
    {
        get { return done; }
        set
        {
            done = value;
            this.propChanged("Done");
        }
    }
    public DelegateCommand Renew1Command;
    public void Renew1(object obj)
    {
        MessageBox.Show("Hello Command");
        System.Console.WriteLine("Hello Command");
    }
    public StockModel()
    {
        Renew1Command = new DelegateCommand();
        this.Renew1Command.ExecuteAction += this.Renew1;
    }             
}

最后,我通过以下方式初始化数据源:

List<StockModel> stockList = new List<StockModel>();
stockList.Add(new StockModel() { Code = "601919", Cost = "8888", Name = "CIB", Done = true, Price = "16.1", Quantities = "200" });
stockList.Add(new StockModel() { Code = "601919", Cost = "8888", Name = "CIB", Done = false, Price = "16.1", Quantities = "100" });
stockList.Add(new StockModel() { Code = "601919", Cost = "8888", Name = "CIB", Done = true, Price = "16.1", Quantities = "100" });
stockList.Add(new StockModel() { Code = "601919", Cost = "8888", Name = "CIB", Done = true, Price = "16.1", Quantities = "200" });
this.Quote.ItemsSource = stockList;

DataGridTextColumn可以显示绑定源的数据,但我无法点击DataTemplate的按钮从模型中调用相应的操作。如何修复绑定?调用命令

移动到StockModel类,用"public DelegateCommand Renew1Command{get;set;}"替换"publicDelegateCommandRenew1Ccommand;"。问题就会得到解决。

最新更新