Я создаю UserControl с двумя кнопками (Hello и World), которые добавляют «Hello» и «World» к строке, которая отображается в TextBox.
Код в настоящее время работает как задумано, но только когда я не устанавливаю DataContext для UserControl. Как только я установил DataContext, кнопки больше не работают.
<UserControl x:Class="QualityAssuranceAssistance.Views.HomeView"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:local="clr-namespace:QualityAssuranceAssistance.ViewModels;assembly=QualityAssuranceAssistance.ViewModels"
mc:Ignorable="d"
Height="420" Width="660">
<UserControl.DataContext>
<local:HomeViewModel/>
</UserControl.DataContext>
<Grid>
<Button Content="{Binding HelloButton}"
Command="{Binding ClickCommandLive}"
CommandParameter="{Binding}"
HorizontalAlignment="Left"
Margin="208,243,0,0"
VerticalAlignment="Top"
Width="75"/>
<Button Content="{Binding WorldButton}"
Command="{Binding ClickCommandTest}"
CommandParameter="{Binding}"
HorizontalAlignment="Left"
Margin="377,243,0,0"
VerticalAlignment="Top"
Width="75"/>
<TextBox Text="{Binding StringViewModels, UpdateSourceTrigger=PropertyChanged}"
HorizontalAlignment="Left"
Margin="10,10,0,0"
TextWrapping="Wrap"
VerticalAlignment="Top"
Height="56"
Width="640"/>
</Grid>
</UserControl>
Я думаю, что проблема как-то связана с конструктором. Когда я устанавливал DataContext, Visual Studio жаловалась, что в моем ViewModel нет доступных конструкторов. После некоторого поиска в Google я нашел кого-то, кто предложил добавить еще один конструктор без параметров. Я предполагаю, что по какой-то причине этот конструктор теперь используется для создания экземпляра ViewModel, поэтому команды в моем другом конструкторе не создаются.
public HomeViewModel(List<IPageViewModel> viewModels)
{
ClickCommandLive = new RelayCommand(AddLivePages, CanExecute);
ClickCommandTest = new RelayCommand(AddTestPages, CanExecute);
_viewModels = viewModels;
}
public HomeViewModel() { }
Я ожидал, что мой код будет работать только при установленном DataContext и не будет работать, когда он не установлен. Вместо этого без DataContext он, кажется, работает, как я и ожидал, с установленным DataContext. Я все еще очень плохо знаком с WPF (и XAML) и C #, поэтому почти наверняка мне не хватает чего-то очень очевидного, но я не могу понять, что это такое.