【发布时间】:2014-08-24 21:31:08
【问题描述】:
我目前正在尝试使用参数化构造函数绑定到来自类的数据,但我无法弄清楚如何让 xaml 使用该构造函数而不是默认构造函数。我想要做的是将Gauge Control 的Value 属性设置为等于GetDoDo method 中显示的IMobileServiceTableQuery 返回的条目数。
我的视图模型类 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); }
}
}
然后在我的 xaml.cs 文件中,我有一个 GetToDo 方法,该方法在 Azure 中查询一个表并将视图模型中的 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?
*******************************************************************************/
}
最后,我的 xaml 中的相关代码如下所示:
<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 中的_value。我的想法是 xaml 代码只查看默认构造函数,看看那里没有定义任何内容并假设 Value 是一个空值。我不明白的是如何让xaml代码看到参数化构造函数中设置的_value的值。
提前感谢任何可以提供帮助的人。
【问题讨论】:
-
"can't get it to work" 是一个可怕的问题陈述。
-
你的 ToDo() 与静态资源没有任何关系。
-
好的,但是我应该在
StatsViewModel类中做一些不同的事情还是应该在ToDo方法中设置绑定?这就是我包含它的原因。 -
您仍然没有说明实际结果与预期结果,编辑并没有太大帮助。
-
Source={StaticResource不会连接到您在 C# 中执行的任何操作。请参阅有关数据绑定的基本教程。
标签: c# xaml data-binding windows-store-apps viewmodel