[英]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.