C# 使用参数化构造函数在xaml中绑定

C# 使用参数化构造函数在xaml中绑定,c#,xaml,data-binding,windows-store-apps,viewmodel,C#,Xaml,Data Binding,Windows Store Apps,Viewmodel,我目前正试图绑定到一个具有参数化构造函数的类中的数据,但我很难弄清楚如何让xaml使用该构造函数而不是默认构造函数。我要做的是将我的仪表控件的值属性设置为等于GetDoDo方法中显示的IMobileServiceTableQuery返回的条目数 我的viewmodel类StatsViewModel如下所示: class StatsViewModel : BindableBase { private int _value; // Default constructor p

我目前正试图绑定到一个具有参数化构造函数的类中的数据,但我很难弄清楚如何让xaml使用该构造函数而不是默认构造函数。我要做的是将我的
仪表控件的
属性设置为等于
GetDoDo方法中显示的
IMobileServiceTableQuery
返回的条目数

我的viewmodel类
StatsViewModel
如下所示:

class StatsViewModel : BindableBase
{
    private int _value;

    // Default constructor
    public StatsViewModel() { }

    public StatsViewModel(int val)
    {
        _value = val;
    }

    public int Value {
        get { return _value; }
        set { this.SetProperty(ref _value, value); }
    }
}
<Page.Resources>
    ...
    <viewmodels:StatsViewModel x:Name="StatsViewModel" />
</Page.Resources>

...

<StackPanel>
    <TextBlock Text="To Do Items:" Style="{StaticResource HeaderTextBlockStyle}"/>
    <controls:Gauge
        x:Name="ToDoGauge"
        Minimum="0"
        Maximum="100"
        Height="200"
        Value="{Binding Value}"
        Unit="To Do" FontFamily="Global User Interface" />
</StackPanel>
然后在我的xaml.cs文件中,我有一个
GetToDo
方法,该方法在Azure中查询一个表,并在viewmodel中设置Value属性,使其等于查询返回的行数:

private async void GetTodo()
{
    ImobileServiceTableQuery<int> query = taskTable
        .Where(t => t.Status == 1)
        .Select(t => t.Status);

    List<int> statusOne = await query.ToListAsync();

    int val = statusOne.Count;

    StatsViewModel stats = new StatsViewModel(val);

    /******************************************************************************
     * This is something I tried earlier but it didn't
     * work so I commented it out:
     *
     * Binding valueBinding = new Binding();
     * valueBinding.Source = stats;
     * BindingOperations.SetBinding(ToDoGauge, Gauge.ValueProperty, valueBinding);
     *
     * Was I on the right track here?
     *******************************************************************************/
}
private异步void GetTodo()
{
ImobileServiceTableQuery=taskTable
.其中(t=>t.状态==1)
.选择(t=>t.Status);
List statusOne=wait query.ToListAsync();
int val=statusOne.Count;
StatsViewModel stats=新的StatsViewModel(val);
/******************************************************************************
*这是我之前尝试过的,但没有成功
*工作,所以我评论说:
*
*Binding valueBinding=新绑定();
*valueBinding.Source=stats;
*BindingOperations.SetBinding(ToDoGauge、Gauge.ValueProperty、valueBinding);
*
*我走对了吗?
*******************************************************************************/
}
最后,我的xaml中的相关代码如下所示:

class StatsViewModel : BindableBase
{
    private int _value;

    // Default constructor
    public StatsViewModel() { }

    public StatsViewModel(int val)
    {
        _value = val;
    }

    public int Value {
        get { return _value; }
        set { this.SetProperty(ref _value, value); }
    }
}
<Page.Resources>
    ...
    <viewmodels:StatsViewModel x:Name="StatsViewModel" />
</Page.Resources>

...

<StackPanel>
    <TextBlock Text="To Do Items:" Style="{StaticResource HeaderTextBlockStyle}"/>
    <controls:Gauge
        x:Name="ToDoGauge"
        Minimum="0"
        Maximum="100"
        Height="200"
        Value="{Binding Value}"
        Unit="To Do" FontFamily="Global User Interface" />
</StackPanel>

...
...
我很确定这个问题与构造函数是参数化的这一事实有关,因为当我遍历代码时,我能够验证我在
GetToDo()
中查询的列表中的项数是否被准确地分配给
StatsViewModel
中的
\u value
。我的想法是xaml代码只是查看默认构造函数,这里没有定义任何内容,并且假设值为空值。我不明白的是如何让xaml代码看到参数化构造函数中设置的_value的值


提前感谢所有能够提供帮助的人。

好的,因此我使用了一种解决方法,在没有实际解决xaml中绑定到此数据的问题的情况下实现了预期的结果,但我做了以下工作:

private async void GetToDo()
{

    ...

    double value = Double(Parse(val.ToString());

    ToDoGauge.SetValue(Gauge.ValueProperty, value);

}

当我弄明白如何使绑定正常工作时,我将为任何可能有类似问题的人编辑此答案。如果有人知道如何修复此问题,请随时发布--我很想看看其他解决方案是什么样子。

“无法使其工作”是一个可怕的问题陈述。您的ToDo()与静态资源没有任何关系。好的,但是,在我的
StatsViewModel
类中是否应该做一些不同的事情,或者应该在我的
ToDo
方法中设置绑定?这就是我包含它的原因。您仍然没有说明实际结果与预期结果,编辑没有太大帮助。
Source={StaticResource
将不会连接到您在C#中所做的任何操作。请参阅有关数据绑定的基本教程。