使用DataGrid.RowDetailsTemplate来使用访问命令方法的麻烦

时间:2015-12-23 14:02:58

标签: mvvm 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按钮从模型中调用相应的动作。      如何修复绑定?     呼叫命令

1 个答案:

答案 0 :(得分:0)

转到StockModel类,替换“public DelegateCommand Renew1Command;”使用“public DelegateCommand Renew1Command {get; set;}”。 问题将得到解决。