如何绑定到视图中的属性但不在viewmodel中绑定?

时间:2015-08-11 06:40:20

标签: c# wpf xaml data-binding

我有一些控件,其值在视图中使用 ,但在视图模型中没有任何关注。我想将控件绑定到视图中的属性,而不必将它们复制到视图模型。

根据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; }
  ...
}

我的代码中缺少什么?或者我误解了答案并以错误的方式解决了这个问题?

1 个答案:

答案 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" />