从XAML绑定到特定类

时间:2014-11-03 18:04:50

标签: c# wpf xaml

我必须使用ICommand执行绑定,但似乎我声明我的ICommand的特定类甚至没有被触发。我在AccView.xaml UserControl中定义了以下按钮

<Button x:Name="buttonInit" Content="init" Height="32" Cursor="Hand" Command="{Binding initCommand}" HorizontalAlignment="Left" Margin="24,43,0,0" VerticalAlignment="Top" Width="156" Style="{DynamicResource RoundCornerButton}" />

然后我使用特定的类SetAccValues.cs:

public class GetAccValues : AccView
{

    public ICommand initCommand 
    {
        get { return new DelegateCommand<object>(initBluetooth, canInit); }
    }

    private async void initBluetooth(object context)
    {
        int serviceNumb = 1;
        await InitializeAsync(PerformAccOperations.Readings.None, serviceNumb);
        if (SensorOK && Initialized != null) Initialized(this);
    }

    private bool canInit(object context)
    {
        return true;
    }

}

但问题是当我按下按钮时,甚至没有触发ICommand。在这种情况下问题在哪里?

2 个答案:

答案 0 :(得分:0)

绑定表达式指示UI在表单的DataContext上查找属性。

要获得所需的结果,您需要在构造函数中执行此操作:

public AccView()
{
  this.DataContext = this;
}

它告诉运行时在评估绑定表达式时查看AccView实例。

答案 1 :(得分:0)

看起来你错过了DataContext。在您提到的评论中,GetAccValues是您的ViewModel。您可以在codebehind中设置它。喜欢NSFW的回答。只将其设置为ViewModel的实例,而不是View视图本身。

或者,您可以在XAML中执行此操作:

<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:local="clr-namespace:AccTestApp"
    Title="MainWindow" Height="350" Width="525">
<Window.DataContext>
    <local:GetAccValues/>
</Window.DataContext>

之后,在initCommand的getter中设置断点,以确保调用它。它应该在创建窗口时初始化。

如果可行,您可以通过在应用程序资源中设置数据上下文来使View和ViewModel之间的关系更少耦合,并仅将其用作View中的静态资源。您可以在此处找到此方法的详细信息:https://stackoverflow.com/a/4590558/3330348