Piszę aplikację testową w Windows Forms. Ma prostą formę z TextBox i wymaga implementacji DataBinding. Zaimplementowałem klasy FormViewModel do przechowywania moich danych i mam 1 klasę dla moich danych biznesowych - TestObject. ObiektCzy powiązanie danych obsługuje zagnieżdżone właściwości w Windows Forms?
Business Data:
public class TestObject : INotifyPropertyChanged
{
private string _testPropertyString;
public string TestPropertyString
{
get
{
return _testPropertyString;
}
set
{
if (_testPropertyString != value)
{
_testPropertyString = value;
RaisePropertyChanged("TestPropertyString");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
ViewModel:
public class FormViewModel : INotifyPropertyChanged
{
private TestObject _currentObject;
public TestObject CurrentObject
{
get { return _currentObject; }
set
{
if (_currentObject != value)
{
_currentObject = value;
RaisePropertyChanged("CurrentObject");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
PropertyChanged.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
nieruchomości:
private FormViewModel _viewModel;
public FormViewModel ViewModel
{
get
{
if (_viewModel == null)
_viewModel = new FormViewModel();
return _viewModel;
}
}
Więc teraz staram się wiązać moje dane do TextBox tak:
TextBox.DataBindings.Add("Text", ViewModel, "CurrentObject.TestPropertyString");
I zaskakująco, to nie działa! Nic się nie zmienia, gdy zmieniam CurrentObject lub zmieniam właściwość TestPropertyString.
Ale to działa świetnie, kiedy używam:
TextBox.DataBindings.Add("Text", ViewModel.CurrentObject, "TestPropertyString");
Więc moje pytanie brzmi: czy wsparcie wiązania danych zagnieżdżone właściwości?
Dziękuję za wyjaśnienia!
Więc nie będzie mógł go używać w taki sposób: „CurrentObject.TestPropertyString”? Jaka jest alternatywa dla mojego kodu w WinForms? –
@MaksimGladkov Zaktualizowałem odpowiedź za pomocą działającego kodu. Może nie masz czegoś zadeklarowanego własności. – LarsTech
Dziwne, ale to nie działa dla mnie. I tak nic się nie dzieje. –