У меня есть приложение MVVM с сеткой WPF, которая содержит другие встроенные сетки WPF, и в то же время каждое из них содержит несколько полей (WPF TextBlocks).
Очень упрощенный пример - Просмотр:
<Grid>
<Grid>
// Row definitions
// Colum definitions
<TextBlock Grid.Row="3" Grid.Column="0"
Text="{Binding Path=SomeField1}" />
<Grid>
<Grid>
// Row definitions
// Colum definitions
<TextBlock Grid.Row="0" Grid.Column="1"
Text="{Binding Path=SomeField2}" />
<Grid>
</Grid>
Каждый из этих текстовых блоков привязан к строковым свойствам, определенным в модели представления.
Просмотр модели (реализует INotifyPropertyChanged) :
private string _someField1;
public string SomeField1
{
get return _someField1;
set
{
if (_someField1 == value) return;
_someField1 = value;
OnPropertyChanged("SomeField1");
}
}
private string _someField2;
public string SomeField2
{
get return _someField2;
set
{
if (_someField2 == value) return;
_someField2 = value;
OnPropertyChanged("SomeField2");
}
}
Тогда у меня есть модель, я имею в виду класс с некоторыми общедоступными свойствами, который заполняется одним процессом после получения данных с устройства. Этот класс содержит в точности те же свойства, что определены в модели представления.
Модель
public class MyModel
{
private string _someField1;
public string SomeField1
{
get return _someField1;
set
{
if (_someField1 == value) return;
_someField1 = value;
}
}
private string _someField2;
public string SomeField2
{
get return _someField2;
set
{
if (_someField2 == value) return;
_someField2 = value;
}
}
}
Позже из модели представления я извлекаю данные из этого класса (модели) и присваиваю значения этих свойств совпадающим свойствам в модели представления. Наконец, поскольку представление связано с этими свойствами, представление корректно обновляется значениями, как показано в примере ниже.
Просмотр метода модели, который извлекает полученные данные :
private void DataReceived(MyModel data)
{
this.SomeField1= data.SomeField1;
this.SomeField2= data.SomeField2;
}
Проблема в том, что мне нужно дважды определить свойства, в представлении модель и модель. Поэтому я хочу избежать этого, я хотел бы привязать Textblocks непосредственно к свойствам в модели, а не определять свойства в модели представления, чтобы избежать избыточного кода. Или, например, есть ли какой-нибудь простой способ привязать мою модель (MyModel) к внешней основной сетке, а затем к текстовым полям, привязанным к свойствам в модели представления (аналогично при привязке источника элементов в сетке данных)?