2015-07-24 7 views
5

अगर मोड = Oneway कोई समस्या नहीं है, लेकिन मैं यह है: कक्षा:WPF TwoWay एक स्थिर वर्ग के लिए बाइंडिंग संपत्ति

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}"/> 

यह न काम करना चाहते हैं की वजह से दोवे मोड तो इसे कैसे ठीक करें?

उत्तर

2

यदि बाध्यकारी दो-तरफा होने की आवश्यकता है, तो आपको पथ प्रदान करना होगा। स्थिर संपत्ति पर दो-तरफा बाध्यकारी करने की एक चाल है, बशर्ते कक्षा स्थिर न हो: संसाधनों में कक्षा का डमी उदाहरण घोषित करें, और बाध्यकारी के स्रोत के रूप में इसका उपयोग करें।

<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}"/> 
+0

सरल और आसान। ViewModel btw से क्लीनर। आपका बहुत बहुत धन्यवाद! – Iworb

+1

WPF 4.5 में जितना आसान और आसान नहीं हो सकता है। – Clemens

+0

काम नहीं करता है यदि कक्षा स्थिर है – user1034912

2

मैं एक स्थिर संपत्ति मैं एक ViewModel एक संपत्ति है कि हो जाता है और स्थिर संपत्ति पर सेट है कि उपयोग करने के लिए बाध्य करने के लिए उदाहरण के लिए

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

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

तब मैं यूआई DataContext के रूप में ViewModel का एक उदाहरण सेट है जब ।

9

स्थिर संपत्ति बाध्यकारी वाक्य रचना का उपयोग करें (जो है, जहाँ तक मुझे पता है, WPF 4.5 के बाद से उपलब्ध):

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

, Mode="TwoWay" स्थापित करने के लिए कोई ज़रूरत नहीं के रूप में है कि TextBox.Text के लिए डिफ़ॉल्ट है वैसे भी संपत्ति।


हालांकि स्पष्ट रूप से नहीं पूछा गया है, तो आप संपत्ति परिवर्तन अधिसूचना को भी कार्यान्वित करना चाहेंगे।

इसे देखने के लिए this answer देखें।

+1

मोड के बिना = वनवे त्रुटि हुई: "त्रुटि दो-तरफा बाध्यकारी पथ या XPath की आवश्यकता है। " – Iworb

+0

फिर आपने उपर्युक्त XAML का उपयोग नहीं किया है। ध्यान से पढ़ें, और यहां दिखाए गए बाध्यकारी पथ को ठीक तरह से लिखें। सुनिश्चित करें कि आप घुंघराले ब्रेसिज़ के बजाय ब्रांड्स का उपयोग करें। 'मोड' बिल्कुल सेट न करें, विशेष रूप से' मोड = "वनवे" सेट न करें, क्योंकि यह वही नहीं है जो आप चाहते हैं। मैं बस आपको बता रहा था कि टेक्स्टबॉक्स की टेक्स्ट प्रॉपर्टी के लिए बाध्यकारी डिफ़ॉल्ट रूप से दो-तरफा है, इसलिए मोड सेट करने की कोई आवश्यकता नहीं है। – Clemens

+0

हाय सब। अनुवर्ती प्रश्न: यदि, टेक्स्टबॉक्स और स्ट्रिंग के बजाय हम एक सूची बॉक्स और तारों की एक सरणी के बारे में बात कर रहे हैं, तो यह कैसे किया जा सकता है? – zazkapulsk

संबंधित मुद्दे