未找到绑定命令错误

时间:2015-12-10 10:11:49

标签: c# mvvm windows-phone-8.1 icommand

我没有使用任何特定的库。我在页面中有一个Listview,点击它我想调用一个名为DemoCommand的命令,但是当我将我的ViewModel绑定到页面时,它显示找不到错误命令。我的Xaml代码是。

<Grid DataContext="{Binding OrdersObject}">
    <ListView Grid.Row="1" ItemsSource="{Binding data.orders}" SelectionChanged="ListView_SelectionChanged" ItemTemplate="{StaticResource DueOrderTemplate}" ItemContainerStyle="{StaticResource StretchItemStyle}">
        <Interactivity:Interaction.Behaviors>
            <Core:EventTriggerBehavior EventName="SelectionChanged">
                <Core:InvokeCommandAction CommandParameter="{Binding}" Command="{Binding DemoCommand}"/>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </ListView>
</Grid>

我的绑定代码是

var OrdersObj = new ViewModels.OrdersVM();

            await OrdersObj.GetOrders("cancel");
            this.DataContext = OrdersObj;

我的View Model代码是

class OrdersVM
{
    public Models.DueOrderM OrdersObject { get; set; }

    async public Task<Boolean> GetOrders(string order_type)
    {
       OrdersObject=//from API
    }
    RelayCommand<Models.OOrderM> _demoCommand;

    public RelayCommand<Models.OOrderM> DemoCommand
    {
        get
        {
            if (_demoCommand == null)
            {
                _demoCommand = new RelayCommand<Models.OOrderM>((itemParam) =>
                {
                    System.Diagnostics.Debug.WriteLine(itemParam);
                });
            }
            return _demoCommand;
        }
        set { _demoCommand = value; }
    }

}

2 个答案:

答案 0 :(得分:1)

我能够自己解决这个问题后,看了几个没有工作的例子我自己得到了解决方案,根据这个问题我只需要改变我的Xaml代码。更新的代码是

<ListView x:Name="lstItem" Grid.Row="1" ItemsSource="{Binding OrdersObject.data.orders}" ItemTemplate="{StaticResource DueOrderTemplate}" ItemContainerStyle="{StaticResource StretchItemStyle}">
        <Interactivity:Interaction.Behaviors>
            <Core:EventTriggerBehavior EventName="SelectionChanged">
                <Core:InvokeCommandAction CommandParameter="{Binding SelectedItem, ElementName=lstItem}" Command="{Binding DemoCommand}"/>
            </Core:EventTriggerBehavior>
        </Interactivity:Interaction.Behaviors>
    </ListView>

我注意到的重要一点是在命令参数中命名listview并需要使用x:Name来分配它然后它起作用,否则它不起作用。希望它可以帮助像我这样的人。

答案 1 :(得分:0)

  1. 我会将DataContext设置为&#39;代码后面的&#39;但是在XAML中

    xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" 
    xmlns:d="http://schemas.microsoft.com/expression/blend/2008" 
    mc:Ignorable="d" 
    DataContext="{Binding ViewModel, Source={StaticResource ViewModelLocator}}"
    d:DataContext="{Binding ViewModel, Source={StaticResource ViewModelLocator}}"
    
  2. 您将OrdersObject设置为网格DataContext,因此请尝试RelativeSources,以便您的Command-Binding可以再次查看 ViewModel。