Я новичок в MVVM и Caliburn.Micro.
Я реализовал DataGrid, который привязан к <BindableCollection><CustomerModel>
, где CustomerModel:
public class CustomerModel
{
public string FirstName { get; set; }
public string LastName { get; set; }
public string StreetName { get; set; }
public int HouseNumber { get; set; }
public string ApartmentNumber { get; set; }
public string PostalCode { get; set; }
public string Town { get; set; }
public int PhoneNumber { get; set; }
public string DateOfBirth { get; set; }
public int Age { get; set; }
}
Эти данные загружаются из XML файл при запуске, а также может быть сохранен в файл XML, нажав кнопку «Сохранить», которая связана с методом SaveTo XML () и, очевидно, с CanSaveTo XML (). Сохранение и загрузка работают отлично, но я хочу, чтобы кнопка «Сохранить» была активна только в том случае, если пользователь отредактировал DataGrid, иначе она должна оставаться отключенной.
Я попытался сравнить текущее количество объектов класса CustomerModel с количество объектов CustomerModel при запуске. Если номер отличается, он должен активировать кнопку, поскольку это означает, что кто-то ввел или удалил запись.
public bool CanSaveToXML()
{
if (CustomersOnStartup != Customers.Count())
return true;
else
return false;
}
где
public BindableCollection<CustomerModel> Customers { get; set; }
Проблема в том, что Customers.Count () выполняется только один раз, и номер не обновляется после запуска и добавления / удаления записи пользователем. Я знаю, что он, вероятно, связан с
NotifyOfPropertyChange(() => ???)
, но я понятия не имею, как его использовать в отношении количества объектов с Customers.Count ()
Любые идеи приветствуются.
Реализация XAML:
<Grid>
<Grid.ColumnDefinitions>
<ColumnDefinition Width="20"/>
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="20"/>
</Grid.ColumnDefinitions>
<Grid.RowDefinitions>
<RowDefinition Height="20"/>
<RowDefinition Height="auto"/>
<RowDefinition Height="*"/>
<RowDefinition Height="20"/>
<RowDefinition Height="20"/>
</Grid.RowDefinitions>
<DataGrid Grid.Row="1" Grid.Column="1" x:Name="Customers" AlternatingRowBackground="LightGray"
AutoGenerateColumns="False">
<DataGrid.Columns>
<DataGridTextColumn Header="First Name" Width="auto" Binding="{Binding Path=FirstName, Mode=TwoWay}" />
<DataGridTextColumn Header="Last Name" Width="auto" Binding="{Binding Path=LastName}" />
<DataGridTextColumn Header="Street Name" Width="auto" Binding="{Binding Path=StreetName}" />
<DataGridTextColumn Header="House Number" Width="auto" Binding="{Binding Path=HouseNumber}" />
<DataGridTextColumn Header="Apartment Number" Width="auto" Binding="{Binding Path=ApartmentNumber}" />
<DataGridTextColumn Header="Postal Code" Width="auto" Binding="{Binding Path=PostalCode}" />
<DataGridTextColumn Header="Town" Width="auto" Binding="{Binding Path=Town}" />
<DataGridTextColumn Header="Phone Number" Width="auto" Binding="{Binding Path=PhoneNumber}" />
<DataGridTextColumn Header="Date of Birth" Width="auto" Binding="{Binding Path=DateOfBirth}" />
<DataGridTextColumn Header="Age" Width="auto" Binding="{Binding Path=Age}" IsReadOnly="True"/>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="SaveToXML" Content="Save" Grid.Column="1" Grid.Row="3" Width="50" HorizontalAlignment="Left"/>
</Grid>