Я пытаюсь привязать свой DataTrigger к свойству bool
, но по какой-то причине он не хочет изменять значения.Он начинается как ложный, а затем, когда я выбираю RadioButton, он становится истинным, но значение не обновляет мой DataTrigger.Я попытался связать свойство Text
TextBox, чтобы увидеть, какое значение было, и если оно меняется, но это не так. Вот видео, показывающее, как оно ведет себя
Как вы можете видеть, когда я отлаживаю, оно становится истинным, но не обновляет свойство Text
.вернуться к истине, потому что вы выбираете новую кнопку RadioButton.Однако это не так.
Основная проблема Я пытаюсь привязать мой DataTrigger
<DataTrigger Binding="{Binding Path=EntryItemViewModel.IsEntrySelected}" Value="True">
к моему IsEntrySelected
, но он никогда не читает значение какtrue, ЕСЛИ Я явно установил его в true в конструкторе
public EntryItemViewModel()
{
IsEntrySelected = true;
}
MainWindows.xaml.cs
public partial class MainWindow : Window
{
public MainWindow()
{
InitializeComponent();
DataContext = new EntryItemListViewModel();
}
}
и MainWindow.xaml
<Grid>
<!-- Animation -->
<Grid.Resources>
<system:Double x:Key="AddEntrySlideOffset">300</system:Double>
<Storyboard x:Key="AddEntrySlideRight">
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
From="0" To="{StaticResource AddEntrySlideOffset}"
Duration="0:0:0.2" />
</Storyboard>
<Storyboard x:Key="AddEntrySlideLeft">
<DoubleAnimation Storyboard.TargetProperty="(UIElement.RenderTransform).(TranslateTransform.X)"
From="{StaticResource AddEntrySlideOffset}" To="0"
Duration="0:0:0.2" />
</Storyboard>
</Grid.Resources>
<Grid Width="150"
HorizontalAlignment="Left">
<local:EntryItemListUserControl x:Name="MyUserControl"/>
</Grid>
<TextBox Text="{Binding EntryItemViewModel.IsEntrySelected}"
Width="200"
Height="25"/>
<StackPanel Height="50"
Width="50"
Background="Gainsboro" Margin="375,128,367,241">
<StackPanel.Style>
<Style TargetType="StackPanel">
<Style.Triggers>
<DataTrigger Binding="{Binding Path=EntryItemViewModel.IsEntrySelected}" Value="True">
<DataTrigger.EnterActions>
<BeginStoryboard Storyboard="{StaticResource AddEntrySlideRight}" />
</DataTrigger.EnterActions>
<DataTrigger.ExitActions>
<BeginStoryboard Storyboard="{StaticResource AddEntrySlideLeft}" />
</DataTrigger.ExitActions>
</DataTrigger>
</Style.Triggers>
</Style>
</StackPanel.Style>
<StackPanel.RenderTransform>
<TranslateTransform />
</StackPanel.RenderTransform>
</StackPanel>
</Grid>
EntryItemUserControl.xaml
<ListBox HorizontalContentAlignment="Stretch"
ItemsSource="{Binding Items}"
SelectedItem="{Binding EntryItem}">
<ListBox.ItemTemplate>
<DataTemplate>
<Grid Margin="0,2">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
</Grid.ColumnDefinitions>
<RadioButton Grid.Column="0"
GroupName="Content"
Content="{Binding Title}"
IsChecked="{Binding IsEntrySelected}"/>
</Grid>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
EntryItemListViewModel.cs
public class EntryItemListViewModel : INotifyPropertyChanged
{
public ObservableCollection<EntryItemViewModel> Items { get; set; } = new ObservableCollection<EntryItemViewModel>();
public EntryItemViewModel EntryItemViewModel { get; set; } = new EntryItemViewModel();
public EntryItemListViewModel()
{
Items.Add(new EntryItemViewModel { Title = "Hello World" });
Items.Add(new EntryItemViewModel { Title = "Hello World" });
Items.Add(new EntryItemViewModel { Title = "Hello World" });
Items.Add(new EntryItemViewModel { Title = "Hello World" });
}
private EntryItemViewModel _entryItem;
public EntryItemViewModel EntryItem
{
get { return _entryItem; }
set
{
_entryItem = value;
OnPropertyChanged(nameof(EntryItem));
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}
И, наконец, EntryItemViewModel.cs
public class EntryItemViewModel : INotifyPropertyChanged
{
private string _title;
public string Title
{
get { return _title; }
set
{
_title = value;
OnPropertyChanged("Title");
}
}
private bool _isSelected;
public bool IsEntrySelected
{
get { return _isSelected; }
set
{
_isSelected = value;
OnPropertyChanged("IsEntrySelected");
}
}
public event PropertyChangedEventHandler PropertyChanged;
[NotifyPropertyChangedInvocator]
protected virtual void OnPropertyChanged([CallerMemberName] string propertyName = null)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
}