![](/img/trans.png)
[英]Can't Select All in DataGrid when Clicking Button in WPF Caliburn.Micro
[英]Caliburn.Micro MVVM WPF - enable a button when DataGrid has been edited by the user, otherwise disable it
我是 MVVM 和 Caliburn.Micro 的新手。
我已經實現了一個綁定到<BindableCollection><CustomerModel>
的 DataGrid,其中 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 文件加載,也可以通過單擊連接到方法 SaveToXML() 和 CanSaveToXML() 的按鈕“保存”保存到 XML 文件中。 保存和加載工作完美,但我只想在用戶編輯 DataGrid 時啟用“保存”按鈕,否則它應該保持禁用狀態。
我嘗試將 CustomerModel class 的當前對象數與啟動時 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>
如果要測試集合的計數,則必須使用它后面的屬性:
private int initcount;
public YourViewModel()//constructor
{
RecordNbr = People.Count;
initcount = RecordNbr;
}
//Property whixh follows the number of count
private int _recordNbr;
public int RecordNbr
{
get => _recordNbr;
set
{
_recordNbr = value;
NotifyOfPropertyChange(() => RecordNbr);
NotifyOfPropertyChange(() => CanSaveToXML);
}
}
public void SaveToXML()
{
}
public bool CanSaveToXML
{
get => initcount == RecordNbr;
}
public void RemoveItem()
{
if (People.Count == 0) return;
People.RemoveAt(0);
RecordNbr = People.Count;
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.