В вопросе Получение данных во ViewModel из делегированного объекта по поводу приведённого ниже кода View с привязками и паттерна MVVM в целом я понял следующее:
В отображении имеющихся данных у нас свойства экземпляров, которые передаются из VM и имена свойств экземпляров не могут не совпадать со именами свойств модели. Что касается полей для ввода новых данных, то там уже свойства VM. Получив значения этих свойств, мы используем их в команде добавления нового экземпляра.
<!-- Отображение имеющихся данных -->
<ListView ItemsSource="{Binding Path=staff}">
<ListView.View>
<GridView>
<!-- ... -->
<GridViewColumn DisplayMemberBinding="{Binding PersonStringifiedId, UpdateSourceTrigger=PropertyChanged}">
<GridViewColumn DisplayMemberBinding="{Binding PersonFullName, UpdateSourceTrigger=PropertyChanged}" />
<!-- ... -->
<!-- Ввод новых данных -->
<TextBox>
<TextBox.Text>
<Binding Path="personStringifiedId"/>
</TextBox.Text>
</TextBox>
<TextBox>
<TextBox.Text>
<Binding Path="personFullName"/>
</TextBox.Text>
</TextBox>
<Button Command="{Binding addNewPersonCommand}"/>
К сожалению, одного только понимания выше сказанного не хватило, чтобы благополучно связать новое свойство VM
с элементом View
. По образцу в ответе на вопрос Добавление чекбоска в автоматически генерируемую таблицу я попытался привязать атрибуту IsChecked
чекбокса свойство IsSelected
ViewModel. Не вижу причины вводить это свойство в модель, потому на данный момент оно есть только во ViewModel
.
<ListView ItemsSource="{Binding Path=Staff}">
<!-- ... -->
<GridViewColumn>
<GridViewColumn.CellTemplate>
<DataTemplate>
<CheckBox IsChecked="{Binding Mode=TwoWay,
RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ListViewItem}},
Path=IsSelected,
UpdateSourceTrigger=PropertyChanged}"
При следующем коде VM реакция на изменение значения чекбокса (System.Diagnostics.Debug.WriteLine
) отсуствует:
private bool personSelected = false; // по умолчанию
public bool IsSelected {
get { return personSelected; }
set {
personSelected = value;
System.Diagnostics.Debug.WriteLine(personSelected);
OnPropertyChanged("IsSelected");
}
}
Чего я недопонял в предыдущем вопросе?
Оборудование для ресторана: новинки профессиональной кухонной техники
Частный дом престарелых в Киеве: комфорт, забота и профессиональный уход
Имеется сервер класса TcpListenerОн принимает входящие подключения методом BeginAcceptTcpClient (AsyncCallback, Object)
Нашёл на просторах StackOverflow пример как читать данные из excelНо вылетают ошибки
Когда задан Padding для параграфа, то его формат передается следующей строке, после нажатия EnterИ убрать его получается только вручную