如何绑定到视图中的属性,而不是视图模型中的属性

本文关键字:属性 视图 模型 何绑定 绑定 | 更新日期: 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" />