Я предлагаю вам внести следующие изменения:
XAML
<DataGrid x:Name="GlobalShortcutsDataGrid"
ItemsSource="{Binding GlobalShortcutsObservableCollection}"
SelectedItem="{Binding SelectedRow}"
AutoGenerateColumns="False">
<DataGrid.Columns >
<DataGridTextColumn Header="Shortcut Name" Binding="{Binding ShortcutName}"></DataGridTextColumn>
<DataGridTextColumn Header="Shortcut Path" Binding="{Binding FilePath}"></DataGridTextColumn>
</DataGrid.Columns>
</DataGrid>
<Button x:Name="buttonSave" IsEnabled="{Binding IsButtonSaveEnabled}"
Command="{Binding SaveCommand}"
Content="Save Edits"/>
YourVM
Создать новый булсвойство:
public bool IsButtonSaveEnabled
{
get
{
return yourLogicToBeEnabled;
}
}
затем в вашем наборе FilePath
или ShortcutName
(я не знаю, какой из них используется для изменения состояния кнопки), просто увеличьте изменение IsButtonSaveEnabled
.
Редактировать : изменил XAML, потому что я думал, что вы хотите скрыть его, чтобы не изменять состояние включения.Просто удалите конвертер.
Редактировать: Для решения вашего сценария я бы создал такой класс:
public class YourParentVMDataSource
{
private YourParentVM yourParentVM;
private GlobalShortcutsVM globalShorcutsVM;
public YourParentVMDataSource(GlobalShortcutsVM globalShortcutsVm, YourParentVM yourParentVM)
{
this.globalShorcutsVM = globalShortcutsVm;
this.yourParentVM = yourParentVM;
}
public void CreateDataSource()
{
this.globalShorcutsVM.Model.PropertyChanged += this.OnGlobalShortcutsModelPropertyChanged
}
private void OnGlobalShortcutsModelPropertyChanged(object sender, PropertyChangedEventArgs e)
{
switch (e.PropertyName)
{
case "ShortcutName":
this.yourParentVM.RaisePropertyChanged("IsButtonSaveEnabled");
break;
case "FilePath":
this.yourParentVM.RaisePropertyChanged("IsButtonSaveEnabled");
break;
}
}
}
Где yourParentVM
- ваша "основная" ВМ, а GlobalShortcutsVM
- это виртуальная машина, которую я предполагал использовать для заполнения DataGrid
(у вас должно быть ObservableCollection<GlobalShortcutsVM> GlobalShortcutsObservableCollection
)
Каждый раз, когда что-то изменяется в вашей модели GlobalShortcutsObservableCollection, оно вызывает событие, и вы обрабатываете его.В обработчике вы вызываете свойство родительской виртуальной машины.
Вы должны создать этот новый класс и вызвать метод CreateDataSource
после создания своей "основной" виртуальной машины.