我有一些控件,其值在视图中使用 ,但在视图模型中没有任何关注。我想将控件绑定到视图中的属性,而不必将它们复制到视图模型。
根据a similar question's reply,这是可能的,我正在使用以下代码来实现这一目标。但是,当我没有看到预期的结果时,我猜我无意中绑定了一个旗杆,而不是预期的属性。
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; }
...
}
我的代码中缺少什么?或者我误解了答案并以错误的方式解决了这个问题?
答案 0 :(得分:4)
此:
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
标记扩展名(当属性为实例时,这也适合这种情况):
<DatePicker x:Name="Uno"
SelectedDate="{Binding StartDate,
RelativeSource={RelativeSource Mode=FindAncestor,
AncestorType={x:Type Window}}}"
SelectedDateChanged="DatePicker_OnSelectedDateChanged" />