我正在尝试将查询结果绑定到My datagrid,当前正在显示Nothing。如果我可以得到Bind的指导。
public int Indepth { get; set; }
public ReportGridViewModel(IEventAggregator events)
{
EndDateTo = DateTime.Today;
StartDateTo = DateTime.Today;
using (var ctx = DB.Get())
{
var query = from z in ctx.Interactions
where z.ActivityDate >= StartDateTo && z.ActivityDate <= EndDateTo
select new {Indepth = z.Indepth};
Indepth = query.Count();
}
}
Xaml Bindings:
<DatePicker x:Name="StartDateTo" SelectedDate="{Binding StartDateTo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<DatePicker x:Name="EndDateTo" SelectedDate="{Binding EndDateTo, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}"/>
<telerik:GridViewDataColumn Header="InDepth" DataMemberBinding="{Binding Indepth}"/>
我认为这与我的约会参数有关,但我不完全确定。
使用下面的代码来测试绑定并且它可以正常工作
using (var ctx = DB.Get())
{
Items.AddRange(
ctx.Interactions.Select(
x => new InteractionDTO()
{
ActivityDate = x.ActivityDate,
Indepth = x.Indepth
}
)
);
}
答案 0 :(得分:0)
正如@WilliamCustode在评论中提到的那样,您还没有提供足够的代码来确切地知道可能出现的错误。但是,所有这些Binding
问题都以同样的方式解决。您需要简化情况并采用有条理的方法。
首先,我们确保DataContext
已正确设置为ReportGridViewModel
的实例。接下来,我们检查数据:
using (var ctx = DB.Get())
{
var query = from z in ctx.Interactions
where z.ActivityDate >= StartDateTo && z.ActivityDate <= EndDateTo
select new {Indepth = z.Indepth};
Indepth = query.Count();
} // <-- put a breakpoint here
使用断点,您可以测试您的Indepth
属性实际是否具有值。如果这一切都很好,我们会在Visual Studio输出窗口中检查Binding
错误。你应该看到这样的东西:
System.Windows.Data错误:40:BindingExpression路径错误:'object'''NameOfDataBoundObject'(Name ='')'上找不到'some'属性。 BindingExpression:路径= SomePath; DataItem ='NameOfDataBoundObject'(Name =''); target元素是'TypeOfUiElement'(Name ='NameOfUiElement'); target属性是'PropertyName'(类型'TypeOfProperty')
始终关注这些错误,因为它们可以帮助您了解您的问题所在。说了这么多,我想我刚刚注意到你的问题实际上是什么......你似乎试图从视图模型绑定到你的Indepth
属性,但是你的GridViewDataColumn
没有将视图模型作为其DataContext
。大概,你有这样的事情:
<telerik:GridView ItemsSource="{Binding SomeCollection}">
<telerik:GridView.Columns>
<telerik:GridViewDataColumn Header="InDepth"
DataMemberBinding="{Binding Indepth}" />
...
<.telerik:GridView.Columns>
</telerik:GridView>
GridViewDataColumn
将DataContext
设置为SomeCollection
集合属性中的相关数据项,不设置视图模型。但是, 仍然可以使用RelativeSource Binding
这样的内容访问视图模型:
<telerik:GridViewDataColumn Header="InDepth" DataMemberBinding="{Binding Indepth,
RelativeSource={RelativeSource AncestorType={x:Type YourPrefix:YourWindow}}}" />
在此示例中,YourWindow
是Window
或UserControl
的名称,其视图模型设置为DataContext
,YourPrefix
是该类的XAML命名空间。最后,回到上面显示的假想错误,你会有一个说'Indepth' property not found on 'object' ''NameOfClassInSomeCollection'
和之类的东西,就是你找到问题的线索。