【问题标题】:Bind Static Variable using TwoWay binding?使用双向绑定绑定静态变量?
【发布时间】:2018-03-26 15:14:47
【问题描述】:

我正在尝试将静态变量绑定到日历,但在使用 TwoWay 绑定时出现错误,我需要 Path。

有很多绑定静态变量的示例,但我似乎无法找到任何适合我的示例。

这是属性:

private static DateTime _vCalenderSelectedDate;

public static DateTime CalenderSelectedDate
{
    get { return _vCalenderSelectedDate; }
    set
    {
        _vCalenderSelectedDate = value;
        NotifyStaticPropertyChanged();
    }
}

这是简化的 XAML:

xmlns:viewModels="clr-namespace:StaffShiftManager.ViewModels"

<Calendar SelectedDate="{Binding
    Source={x:Static viewModels:ShiftManagerViewModel.CalenderSelectedDate}, 
    UpdateSourceTrigger=PropertyChanged}" >

我尝试按照大多数人建议的方式添加 XAML 路径,但我无法让它工作;

<Calendar SelectedDate="{Binding 
    Source={x:Static viewModels:ShiftManagerViewModel.CalenderSelectedDate},
    Path=CalenderSelectedDate,
    UpdateSourceTrigger=PropertyChanged}" >

有人能指出我正确的方向吗?

【问题讨论】:

    标签: c# wpf xaml mvvm


    【解决方案1】:

    绑定表达式应如下所示。注意路径周围的括号。

    <Calendar SelectedDate="{Binding 
        Path=(viewModels:ShiftManagerViewModel.CalenderSelectedDate)}"/>
    

    有关详细信息,请参阅 MSDN 上的 PropertyPath for Objects in Data Binding 文章,单属性、附加或其他类型限定部分。

    【讨论】:

    • 嘿克莱门斯,我确信我尝试过从这里得到的方法 10rem.net/blog/2011/11/29/…。但果然,第一个效果很好。谢谢 你是不是故意漏掉了http://10rem.net/blog/2011/11/29/wpf-45-binding-and-change-notification-for-static-properties?
    • 我猜 UpdateSourceTrigger 是多余的,对吧?
    • 我把它留在了我的例子中。我会在没有现在的情况下尝试。
    • 你又是对的,这是多余的。怎么会这样?我确信您总是必须在 XAML 中指定 PropertyChanged
    • 对于大多数依赖属性,DefaultUpdateSourceTrigger 值是 PropertyChanged。如果要更改默认值,只需在双向绑定上设置 UpdateSourceTrigger。
    【解决方案2】:

    为了确保完全回答这个问题,我认为链接到同一用户提出的另一个相关问题的答案是相关的。

    上面的问题有一行:

    NotifyStaticPropertyChanged();
    

    我希望能够将用户的问题与答案中提供的 XAML 结合起来,但需要知道静态属性更改的通知是如何工作的。

    我搜索了一下,终于找到了related answer,它有这个定义:

    public static event PropertyChangedEventHandler StaticPropertyChanged;
    
    private static void NotifyStaticPropertyChanged([CallerMemberName] string name = null)
    {
        StaticPropertyChanged?.Invoke(null, new PropertyChangedEventArgs(name));
    }
    

    【讨论】:

      猜你喜欢
      • 2011-02-11
      • 2012-10-15
      • 1970-01-01
      • 2013-11-15
      • 2013-07-22
      • 1970-01-01
      • 2012-10-29
      • 1970-01-01
      • 2019-06-06
      相关资源
      最近更新 更多