Споткнулся на обновлении DataGrid при добавлении элемента в ObservableCollection. Есть некий класс Material:
public class Material : INotifyPropertyChanged
{
public string Type
{
get { return type; }
set { type = value; OnPropertyChanged("Type");
}
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
В VM создаю экземпляр класса и несколько методов для работы с ним.
public class Window_с : INotifyPropertyChanged
{
ObservableCollection<Material> furniture;
public ObservableCollection<Material> Furniture
{
get { return furniture; }
set {
furniture = value;
OnPropertyChanged("Furniture");
}
}
public Window_с()
{
furniture = new ObservableCollection<Material>();
}
public void SetFurniture()
{
Material tmp = new Material();
Furniture.Add(tmp);
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
В XAML делаю привязку:
<Grid>
<DataGrid Name="CalculateGrid" ItemsSource="{Binding
Window_Client.Furniture, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}" />
</Grid>
В приложении есть кнопка, при нажатии на которую открывается CalculateWindow с CalculateGrid, но при добавлении или изменении коллекции, Grid обновляется только при повторном открытии CalculateWindow. При попытке изменить коллекцию, состояние так же не сохраняется. При отладке, программа даже не пытается попасть в
set {
furniture = value;
OnPropertyChanged("Furniture");
}
upd:
В программе есть главное окно, в котором задаются размеры:
public MainWindow()
{
InitializeComponent();
DataContext = new VM();
}
private void calculateButton_Click(object sender, RoutedEventArgs e)
{
CalculateWindow f = new CalculateWindow ();
f.DataContext = DataContext;
f.Show();
}
и окно с расчетом.
public partial class CalculateWindow : Window
{
public CalculateWindow()
{
InitializeComponent();
}
}
В VM()
class VM : INotifyPropertyChanged
{
public RelayCommand CalculateWindow => new RelayCommand(o =>
{
Window_Client = new Window_с();
CalculateWindows();
});
Window_с window;
public Window_с Window_Client
{
get { return window; }
set { window = value; OnPropertyChanged("window"); }
}
public void CalculateWindows()
{
Window_Client.SetFurniture(pList);
}
public event PropertyChangedEventHandler PropertyChanged;
public void OnPropertyChanged([CallerMemberName]string prop = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(prop));
}
}
}
У вас неверно настроены нотификации об изменении свойства Window_Client
public Window_с Window_Client
{
get { return window; }
set { window = value; OnPropertyChanged("window"); }
}
В метод OnPropertyChanged
необходимо передавать название публичного свойства, а вы передаете название приватного поля. Должно быть вот так:
public Window_с Window_Client
{
get { return window; }
set { window = value; OnPropertyChanged(nameof(Window_Client)); }
}
Виртуальный выделенный сервер (VDS) становится отличным выбором
В списке находятся превьюшки с подписямиПодписи должны выравниваться по нижнему, а превьюшки по верхнему краю своего контейнера
Есть несколько запросов, к базе данныхСуммарно по времени они выполняются более 10 секунд
У меня есть вот такой вот html код, в котором есть vue атрибуты