2011-10-09 4 views
6

मैं एक सीरियल पोर्ट का उपयोग कर एक प्रोजेक्ट बना रहा हूं। मैं एमवीवीएम मॉडल का उपयोग कर अभ्यास कर रहा हूं। मुझे सीरियल पोर्ट सेट अप करने की ज़रूरत है, इसलिए मैं टूलबार का उपयोग कर रहा हूं।एमवीवीएम पैटर्न का उपयोग करते समय टूलबार को कैसे कार्यान्वित करें?

public class Port : INotifyPropertyChanged, IDataErrorInfo 
{ 
    private SerialPort _serialPort; 

    public Port() 
    { 
     _serialPort = new SerialPort(); 
    } 

    public string PortName 
    { 
     get { return _serialPort.PortName; } 
     set 
     { 
      _serialPort.PortName = value; 
      OnPropertyChanged("PortName"); 
     } 
    } 

    public int BaudRate 
    { 
     get { return _serialPort.BaudRate; } 
     set 
     { 
      _serialPort.BaudRate = value; 
      OnPropertyChanged("BaudRate"); 
     } 
    } 

    public Parity Parity 
    { 
     get { return _serialPort.Parity; } 
     set 
     { 
      _serialPort.Parity = value; 
      OnPropertyChanged("Parity"); 
     } 
    } 

    public int DataBits 
    { 
     get { return _serialPort.DataBits; } 
     set 
     { 
      _serialPort.DataBits = value; 
      OnPropertyChanged("PortDataBits"); 
     } 
    } 

    public StopBits StopBits 
    { 
     get { return _serialPort.StopBits; } 
     set 
     { 
      _serialPort.StopBits = value; 
      OnPropertyChanged("PortStopBits"); 
     } 
    } 

    public Handshake Handshake 
    { 
     get { return _serialPort.Handshake; } 
     set 
     { 
      _serialPort.Handshake = value; 
      OnPropertyChanged("PortHandshake"); 
     } 
    } 

    public string[] AvailablePortNames 
    { 
     get { return SerialPort.GetPortNames(); } 
    } 

    #region IDataErrorInfo Members 

    string IDataErrorInfo.Error { get { return null; } } 

    string IDataErrorInfo.this[string propertyName] 
    { 
     get { return this.GetValidationError(propertyName); } 
    } 

    #endregion // IDataErrorInfo Members 

    #region Validation 

    /// <summary> 
    /// Returns true if this object has no validation errors. 
    /// </summary> 
    public bool IsValid 
    { 
     get 
     { 
      foreach (string property in ValidatedProperties) 
       if (GetValidationError(property) != null) 
        return false; 

      return true; 
     } 
    } 

    static readonly string[] ValidatedProperties = 
    { 
     "PortName", 
    }; 

    string GetValidationError(string propertyName) 
    { 
     if (Array.IndexOf(ValidatedProperties, propertyName) < 0) 
      return null; 

     string error = null; 

     switch (propertyName) 
     { 
      case "PortName": 
       ValidatePortName(); 
       break; 

      default: 
       Debug.Fail("Unexpected property being validated on Port: " + propertyName); 
       break; 
     } 

     return error; 
    } 

    string ValidatePortName() 
    { 
     if (IsStringMissing(this.PortName)) 
     { 
      return Strings.Port_Error_MissingName; 
     } 
     return null; 
    } 

    #endregion // Validation 

    #region INotifyPropertyChanged Members 

    public event PropertyChangedEventHandler PropertyChanged; 

    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     this.VerifyPropertyName(propertyName); 

     PropertyChangedEventHandler handler = this.PropertyChanged; 
     if (handler != null) 
     { 
      var e = new PropertyChangedEventArgs(propertyName); 
      handler(this, e); 
     } 
    } 

    #endregion // INotifyPropertyChanged Members 
} 

फिर, मैं एक SetupPortView मिल गया है:

<UserControl 
    x:Class="PortChat.View.SetupPortView" 
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" 
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" 
    xmlns:vw="clr-namespace:PortChat.View" 
> 
<ToolBar> 
    <Label Content="COM Port:" 
     Target="{Binding ElementName=AvailablePortsComboBox}" 
    /> 
    <ComboBox 
     x:Name="AvailablePortsComboBox" 
     Width="80" 
     ItemsSource="{Binding Path=AvailablePortNames, Mode=OneTime}" 
     SelectedItem="{Binding Path=PortName, ValidatesOnDataErrors=True}" 
     Validation.ErrorTemplate="{x:Null}" 
     /> 
     ... 

मेरा प्रश्न है जब उपयोगकर्ता प्रेस कनेक्ट करें बटन, कि सेटअप के साथ बंदरगाह बनाने के लिए, है

यह मेरा मॉडल है। मुझे यकीन नहीं है कि मैं सही मॉडल बना रहा हूं। मेरी कक्षा मेनविंडो व्यू मॉडेल में, मैंने पोर्ट वैरिएबल बनाया है, लेकिन मुझे लगता है कि यह सही नहीं है।

मैं इस कोड को कैसे बेहतर और MVVM का उपयोग कर पोर्ट वस्तु बना सकते हैं (मैं बक्सें का उपयोग कर उपकरण पट्टी में MVVM का उपयोग कर पता नहीं है)?

उत्तर

2

मैं कॉम्बोबॉक्स की बाइंडिंग बदल दूंगा। मैं कॉम्बोबॉक्स को बंदरगाहों (नामों के नाम) के संग्रह में बांधता हूं और कॉम्बोबॉक्स के चयनित इटैम को व्यूमोडेल पर एक चयनितपोर्ट संपत्ति में बांधता हूं।

इस तरह आप जानते हैं कि बंदरगाह उपयोगकर्ता द्वारा चयनित किया गया है और सही बंदरगाह के लिए संग्रह क्वेरी करने के लिए कोई जरूरत नहीं है।

आप उपयोगकर्ता बनाने/कॉन्फ़िगर एक नए बंदरगाह बस संग्रह करने के लिए एक खाली/नई पोर्ट वस्तु जोड़ सकते हैं और इस नए जोड़े गए आइटम को SelectedPort निर्धारित करने की अनुमति चाहते हैं।

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