2014-06-17 4 views
6

ContractListUserControl.XAML"दो-तरफा बाध्यकारी पथ या XPath की आवश्यकता है" जब संपादित WPF datagrid

<DataGrid AutoGenerateColumns="False" 
       ItemsSource="{Binding Path=ContractList}" 
       SelectedItem="{Binding Path=SelectedContract}"> 
     <DataGrid.Columns> 
      <DataGridTextColumn Binding="{Binding Path=Person.LastName}" Header="Last Name" /> 
      <DataGridTextColumn Binding="{Binding Path=Person.GivenName}" Header="Given Name" /> 
      <DataGridTextColumn Binding="{Binding Path=ContractStart, StringFormat=dd/MM/yyyy, Mode=TwoWay}" Header="Contract Start" /> 
      <DataGridTextColumn Binding="{Binding Path=ContractEnd, StringFormat=dd/MM/yyyy, Mode=TwoWay}" Header="Contract End" /> 
     </DataGrid.Columns> 
</DataGrid> 

Contract.cs

public class Contract 
{ 
    public DateTime ContractStart { get; set; } 
    public DateTime ContractEnd { get; set; } 
    public Person Person { get; set; } 
} 

Person.cs

public class Person 
{ 
    public string LastName { get; set; } 
    public string GivenName { get; set; } 
} 

ViewModel.cs

public class ContractListViewModel : INotifyPropertyChanged 
{ 
    private ObservableCollection<Contract> _contractList; 
    public ObservableCollection<Contract> ContractList 
    { 
     get { return _contractList; } 
     set { SetField(ref _contractList, value,() => ContractList); } // Same as OnPropertyChanged 
    } 

    private Contract _selectedContract; 
    public Contract SelectedContract 
    { 
     get { return _selectedCrew; } 
     set { SetField(ref _selectedCrew, value,() => SelectedCrew); } 
    } 
} 

यदि मैं डेटाग्रिड को केवल पढ़ने के रूप में सेट करता हूं, तो यह ठीक काम करता है, समस्या तब होती है जब मैं अंतिम नाम और GivenName DataGrid कॉलम को सीधे संपादित करता हूं, यह क्रैश हो जाएगा, और अमान्य ऑपरेशन अपवाद को संदेश के साथ फेंक देगा "दो-तरफा बाध्यकारी पथ या XPath की आवश्यकता है"। लेकिन अगर मैं सिर्फ कॉन्ट्रैक्ट स्टार्ट और कॉन्ट्रैक्ट एंड संपादित करता हूं तो यह ठीक काम करता है।

मैं कुछ मदद के लिए खोज की है, और मुझे लगता है कि मैं इस आदमी के साथ एक ही स्थिति को पूरा: DataGrid - "Two-way binding requires Path or XPath."

तो समस्या यह है कि व्यक्ति संपत्ति मान शून्य होगा, और जवाब कहा कि मैं वस्तु को प्रारंभ करना चाहिए कि DataContext में बाध्यकारी लेकिन यह नहीं कहा कि यह कैसे करें।

उत्तर

8

के रूप में इस प्रकार है

public class Contract 
{ 
    public Contract() 
    { 
     Person = new Person(); 
    } 

    public string RankName { get; set; } 
    public string RankShortName { get; set; } 
    public Person Person { get; set; } 
} 

एक निर्माता जोड़ सकते हैं और तदनुसार

+0

Oooo प्रारंभ व्यक्ति संपत्ति का आरंभीकरण आप संशोधित कर सकते हैं प्राप्त करने के लिए !! मुझे यह दृष्टिकोण सोचना चाहिए था। यह काम करता है, thx! –

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