簡體   English   中英

WPF TwoWay綁定到靜態類屬性

[英]WPF TwoWay Binding to a static class Property

如果Mode = OneWay沒有問題,但我有:Class:

namespace Halt
{
    public class ProjectData
    {
            public static string Username {get;set;}
    }
}

和XAML:

xmlns:engine="clr-namespace:Halt.Engine"
<TextBox Name="UsernameTextBox" HorizontalAlignment="Stretch" Margin="10,5,10,0" Height="25"
         Text="{Binding Source={x:Static engine:ProjectData.Username}, Mode=TwoWay}"/>

由於TwoWay模式,這不想工作。 那么如何解決呢?

使用靜態屬性綁定語法(據我所知,自WPF 4.5起可用):

<TextBox Text="{Binding Path=(engine:ProjectData.Username)}"/>

無需設置Mode="TwoWay" ,因為這是TextBox.Text屬性的默認值。


雖然沒有明確要求,但您可能還希望實現屬性更改通知。

請參閱此答案以了解如何操作。

當我必須綁定到靜態屬性時,我使用ViewModel,該ViewModel具有在靜態屬性上獲取和設置的屬性,例如

public class ProjectData
{
        public static string Username {get;set;}
}

public class ViewModel {
   public string UserName {
      get{ return ProjectData.Username ; }
      set { ProjectData.Username  = value; }
   }
}

然后我將ViewModel的實例設置為UI DataContext。

如果綁定需要雙向,則必須提供路徑。 如果類不是靜態的,那么在靜態屬性上進行雙向綁定有一個技巧:在資源中聲明類的虛擬實例,並將其用作綁定的源。

<Window.Resources>
    <local:ProjectData x:Key="projectData"/>
</Window.Resources>
...

<TextBox Name="UsernameTextBox" HorizontalAlignment="Stretch" Margin="10,5,10,0" Height="25"
         Text="{Binding Source={StaticResource projectData}, Path=Username}"/>

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM