我有我可以肯定的一個荒謬無知的問題,但我反正問它,因爲我搜索和搜索,要麼不明白我的解決方案看到還是沒有找到我正在尋找的答案。綁定到ViewModel和CodeBehind中的屬性
我有一個MVVM應用程序。我的XAML是通過將DataContext設置爲虛擬機的屬性來填充屏幕上的數據項目的VM來設置的。我的CodeBehind不會擺弄數據,只會涉及到屏幕。
我現在要做的就是將某些UI元素綁定到foo.xaml.cs(CodeBehind)文件中的屬性。例如,我想在CB中指定FontSize對屬性的綁定,以便在CB的WindowInitialized處理程序中,它可以檢測屏幕大小並更改所有屏幕項的FontSize =所綁定的一個變量。
我可以通過在我的虛擬機中創建一個公共屬性來解決這個問題,然後將CB中的值「注入」到虛擬機中。我知道這會起作用,但這是一種迂迴的方式來獲得我想要的行爲,這並非一帆風順,我相信這是一種錯誤的行事方式。
我搜索周圍,並嘗試了諸如:
FontSize="{Binding RelativeSource={RelativeSource Self},Path="MyFontSize"
(其中「MyFontSize」是一個公衆詮釋屬性)以及多種,我發現其他的例子,但都沒有奏效。
那麼具體的,如果我的代碼隱藏類被稱爲NameChangeSetupMainWindow,這就是那裏的「MyFontSize」性質的生活,
public partial class NameChangeSetupMainWindow : Window
{
private int m_fontSize = 14;
public int MyFontSize
{
get { return m_fontSize; }
set
{
if (m_fontSize != value))
{
m_fontSize = (value > 0) ? value : 10;
}
}
}
...
... rest of the class...
...
}
和VM被稱爲NameChangeSetupViewModel,這就是「真實」的數據就在這裏而在DataContext點ALA:
<Window.DataContext>
<local:NameChangeSetupViewModel/>
</Window.DataContext>
什麼是XAML綁定只涉及到UI的UI項(提示語法,字體大小,E tc)CodeBehind中的變量,而不是將它們放在VM中?
在此先感謝您提供的任何指導。
'{RelativeSource Self}'只適用於'Window'。你在哪裏申請這個綁定?順便說一句,你也可以在後面的代碼中直接更改UI元素的字體大小,而不使用綁定。 –
是的,謝謝HighCore,我正在考慮這個問題,但我認爲將一些UI特有的東西(如FontSize和樣式等)指向一個集中式變量是值得的。 – John
哦,還有「你在哪裏申請這個綁定?」我在「
John