Я действительно борюсь с привязкой данных и методологией MVVM, хотя мне нравится концепция, с которой я только борюсь. Я создал WPF, в котором есть несколько полей со списком и кнопка. В первом поле со списком будут перечислены имена экземпляров базы данных. остальные поля со списком будут заполнены после нажатия кнопки. Поскольку у меня возникли проблемы с первым экземпляром базы данных, полем со списком, я покажу свой код только для него. При запуске приложения загружается поле со списком и, как и ожидалось, выбирается первый элемент. Проблема в том, что когда я выбираю новое имя, мой метод, который, как я ожидаю, будет вызван, не работает. Может ли кто-нибудь помочь мне понять, почему мой метод public DBInstance SelectedDBInstance не выполняется, когда у меня есть это в моем XAML, SelectedValue="{Binding SelectedDBInstance, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged?
Вот мой XAML для списка экземпляров базы данных. У меня есть один вопрос: «значение» fpr SelectedValuePath. Если я изменю его на «DBInstanceName», это не сработает.
Вот мой код ViewModel:
namespace DatabaseTest.ViewModel
{
class RLFDatabaseTableViewModel : INotifyPropertyChanged
{
Utilities dbtUtilities = new Utilities();
public RelayCommand LoadDBInfoCommand
{
get;
set;
}
public RLFDatabaseTableViewModel()
{
LoadDBInstances();
LoadDBInfoCommand = new RelayCommand(LoadDBInfo);
}
public ObservableCollection DBInstances
{
get;
set;
}
public void LoadDBInstances()
{
ObservableCollection dbInstances = new ObservableCollection();
DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
dbInstances.Add(new DBInstance { DBInstanceName = "fal-conversion\\mun2012ci" });
dbInstances.Add(new DBInstance { DBInstanceName = "fal-conversion\\mun2014ci" });
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
dbInstances.Add(new DBInstance { DBInstanceName = dr["Name"].ToString() });
}
}
DBInstances = dbInstances;
}
private DBInstance _selectedDBInstance;
public DBInstance SelectedDBInstance
{
get
{
return _selectedDBInstance;
}
set
{
_selectedDBInstance = value;
RaisePropertyChanged("SelectedDBInstance");
//ClearComboBoxes();
}
}
}
}
Вот код моей модели. Когда я просматриваю код, этот метод, публичная строка DBInstanceName, выполняется несколько раз. Я не знаю почему, и мне это кажется расточительным.
namespace DatabaseTest.Model
{
public class RLFDatabaseTableModel { }
public class DBInstance : INotifyPropertyChanged
{
private string strDBInstance;
public override string ToString()
{
return strDBInstance;
}
public string DBInstanceName
{
get
{
return strDBInstance;
}
set
{
if (strDBInstance != value)
{
strDBInstance = value;
RaisePropertyChanged("DBInstanceName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
Подробнее здесь: https://stackoverflow.com/questions/430 ... dvaluepath
Привязка WPF Combobox и SelectedValue с SelectedValuePath ⇐ C#
Место общения программистов C#
-
Anonymous
1722132315
Anonymous
Я действительно борюсь с привязкой данных и методологией MVVM, хотя мне нравится концепция, с которой я только борюсь. Я создал WPF, в котором есть несколько полей со списком и кнопка. В первом поле со списком будут перечислены имена экземпляров базы данных. остальные поля со списком будут заполнены после нажатия кнопки. Поскольку у меня возникли проблемы с первым экземпляром базы данных, полем со списком, я покажу свой код только для него. При запуске приложения загружается поле со списком и, как и ожидалось, выбирается первый элемент. Проблема в том, что когда я выбираю новое имя, мой метод, который, как я ожидаю, будет вызван, не работает. Может ли кто-нибудь помочь мне понять, почему мой метод public DBInstance SelectedDBInstance не выполняется, когда у меня есть это в моем XAML, SelectedValue="{Binding SelectedDBInstance, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged?
Вот мой XAML для списка экземпляров базы данных. У меня есть один вопрос: «значение» fpr SelectedValuePath. Если я изменю его на «DBInstanceName», это не сработает.
Вот мой код ViewModel:
namespace DatabaseTest.ViewModel
{
class RLFDatabaseTableViewModel : INotifyPropertyChanged
{
Utilities dbtUtilities = new Utilities();
public RelayCommand LoadDBInfoCommand
{
get;
set;
}
public RLFDatabaseTableViewModel()
{
LoadDBInstances();
LoadDBInfoCommand = new RelayCommand(LoadDBInfo);
}
public ObservableCollection DBInstances
{
get;
set;
}
public void LoadDBInstances()
{
ObservableCollection dbInstances = new ObservableCollection();
DataTable dt = SmoApplication.EnumAvailableSqlServers(false);
dbInstances.Add(new DBInstance { DBInstanceName = "fal-conversion\\mun2012ci" });
dbInstances.Add(new DBInstance { DBInstanceName = "fal-conversion\\mun2014ci" });
if (dt.Rows.Count > 0)
{
foreach (DataRow dr in dt.Rows)
{
dbInstances.Add(new DBInstance { DBInstanceName = dr["Name"].ToString() });
}
}
DBInstances = dbInstances;
}
private DBInstance _selectedDBInstance;
public DBInstance SelectedDBInstance
{
get
{
return _selectedDBInstance;
}
set
{
_selectedDBInstance = value;
RaisePropertyChanged("SelectedDBInstance");
//ClearComboBoxes();
}
}
}
}
Вот код моей модели. Когда я просматриваю код, этот метод, публичная строка DBInstanceName, выполняется несколько раз. Я не знаю почему, и мне это кажется расточительным.
namespace DatabaseTest.Model
{
public class RLFDatabaseTableModel { }
public class DBInstance : INotifyPropertyChanged
{
private string strDBInstance;
public override string ToString()
{
return strDBInstance;
}
public string DBInstanceName
{
get
{
return strDBInstance;
}
set
{
if (strDBInstance != value)
{
strDBInstance = value;
RaisePropertyChanged("DBInstanceName");
}
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void RaisePropertyChanged(string property)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(property));
}
}
}
Подробнее здесь: [url]https://stackoverflow.com/questions/43009152/wpf-combobox-binding-and-selectedvalue-with-selectedvaluepath[/url]
Ответить
1 сообщение
• Страница 1 из 1
Перейти
- Кемерово-IT
- ↳ Javascript
- ↳ C#
- ↳ JAVA
- ↳ Elasticsearch aggregation
- ↳ Python
- ↳ Php
- ↳ Android
- ↳ Html
- ↳ Jquery
- ↳ C++
- ↳ IOS
- ↳ CSS
- ↳ Excel
- ↳ Linux
- ↳ Apache
- ↳ MySql
- Детский мир
- Для души
- ↳ Музыкальные инструменты даром
- ↳ Печатная продукция даром
- Внешняя красота и здоровье
- ↳ Одежда и обувь для взрослых даром
- ↳ Товары для здоровья
- ↳ Физкультура и спорт
- Техника - даром!
- ↳ Автомобилистам
- ↳ Компьютерная техника
- ↳ Плиты: газовые и электрические
- ↳ Холодильники
- ↳ Стиральные машины
- ↳ Телевизоры
- ↳ Телефоны, смартфоны, плашеты
- ↳ Швейные машинки
- ↳ Прочая электроника и техника
- ↳ Фототехника
- Ремонт и интерьер
- ↳ Стройматериалы, инструмент
- ↳ Мебель и предметы интерьера даром
- ↳ Cантехника
- Другие темы
- ↳ Разное даром
- ↳ Давай меняться!
- ↳ Отдам\возьму за копеечку
- ↳ Работа и подработка в Кемерове
- ↳ Давай с тобой поговорим...
Мобильная версия