XAML命令从父类绑定

时间:2014-03-07 19:11:11

标签: c# xaml mvvm

在我的ViewModel中我有基本Card类和Deck类,其中包含Observable Collection of Cards。以下是它在XAML中的约束方式

        <GridView.DataContext>
             <local:Deck/>
        </GridView.DataContext>
        <GridView ItemsSource="{Binding DeckCollection}" IsItemClickEnabled="True" Grid.Row="0">
            <GridView.ItemTemplate>
                <DataTemplate>
                    <Button Command="{Binding Path=??}"
                            CommandParameter=??
                        <Button.Content>
                            <Grid>
                                <Image 
                                    Source="{Binding ImagePath}"
                                    Stretch="None"/>
                            </Grid>
                        </Button.Content>
                    </Button>
                </DataTemplate>
            </GridView.ItemTemplate>
        </GridView>

尝试使用RelativeSource,但这给了我6个错误。

<Button Command="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type local:Deck}, Path=ActionCommand}}">

在'RelativeSource'类型中找不到属性'AncestorType'。

在'RelativeSource'类型中找不到属性'Path'。

无法识别或无法访问成员“AncestorType”。

成员“路径”无法识别或无法访问。

元素'RelativeSource'上的未知成员'AncestorType'

元素'RelativeSource'上的未知成员'路径'

这是我的课程

class Deck
{
    private ObservableCollection<Card> _deckCollection = new ObservableCollection<Card>();
    public ObservableCollection<Card> DeckCollection
    {
        get { return _deckCollection; }
        set { _deckCollection = value; }
    }

    public Deck()
    {
        ActionCommand = new MyCommand();
        ActionCommand.CanExecuteFunc = obj => true;
        ActionCommand.ExecuteFunc = AddToList;
    }


    public void AddToList(object parameter)
    {
       //add Card to list which in this case is not possible
       DeckCollection.Add(this) ?
    }
}

class Card
{
    public String Name { get; set; }
    public int Cost { get; set; }
    public String ImagePath { get; set; }
    public MyCommand ActionCommand { get; set; }
}

还有MyCommand类

public class MyCommand : ICommand
{

    public Predicate<object> CanExecuteFunc { get; set; }
    public Action<object> ExecuteFunc { get; set; }

    public bool CanExecute(object parameter)
    {
        return CanExecuteFunc(parameter);
    }

    public event EventHandler CanExecuteChanged;
    public void Execute(object parameter)
    {
        ExecuteFunc(parameter);
    }
}

请帮忙

0 个答案:

没有答案