如何绑定到视图中的属性,而不是视图模型中的属性
本文关键字:属性 视图 模型 何绑定 绑定 | 更新日期: 2023-09-27 18:07:20
我有几个控件,它们的值在视图中使用,但在视图模型中不关心。我想将控件绑定到视图中的属性,而不必将它们复制到视图模型中。
根据类似的问题的答复,这是可能的,我使用下面的代码来实现这一点。然而,当我没有看到预期的结果,所以我猜我无意中绑定到旗杆,而不是预期的属性。
XAML
<DatePicker x:Name="Uno"
SelectedDate="{Binding StartDate, Source={x:Static Application.Current}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />
<DatePicker x:Name="Due"
SelectedDate="{Binding StartDate, Source={x:Static Application.Current}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />
c# public partial class ViewWindow : Window
{
public static DateTime StartDate { get; set; }
...
}
我的代码中遗漏了什么?还是我误解了对方的回答,用了错误的方式?
This:
x:Static Application.Current
尝试将Application.Current
设置为特定绑定表达式的绑定源。但是,很明显,你不想访问像Application.Current.StartDate
这样的东西(我想,你的App
类没有定义这样的属性)。
实际上,我在你的属性定义中遗漏了static
关键字。
如果你使用的是。net 4.5或更高版本,你可以这样为静态属性编写绑定路径:
<DatePicker x:Name="Uno"
SelectedDate="{Binding Path=(local:ViewWindow.StartDate)}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />
local
是一个命名空间,其中定义了ViewWindow
。
否则,使用RelativeSource
标记扩展(当属性为instance时,这也适用):
<DatePicker x:Name="Uno"
SelectedDate="{Binding StartDate,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />