我有一个snackbar和一个按钮,该按钮位于弹出窗口内的stackpanel内部。由于某种原因,这种配置似乎不允许直接绑定。我认为这是相关的,因为Snackbar不在VisualTree中,但我不完全理解我应该如何解决此问题。
<controls:MetroWindow x:Class="OmniClient.MainWindow" >
<Grid>
<materialDesign:PopupBox Grid.Column="1" Grid.Row="1"
Style="{StaticResource MaterialDesignMultiFloatingActionPopupBox}"
PlacementMode="TopAndAlignCentres" ToolTipService.Placement="Right" PopupMode="MouseOver">
<StackPanel>
<Button ToolTip="Nueva alerta" CommandParameter="{Binding ElementName=SnackbarOne}"
Command="{Binding CrearAlertaCommand}" >
<materialDesign:PackIcon Kind="AlarmPlus" />
</Button>
</StackPanel>
</materialDesign:PopupBox>
<materialDesign:Snackbar Grid.Column="0" Grid.Row="1" Width="auto" Grid.ColumnSpan="2" MessageQueue="{materialDesign:MessageQueue}" x:Name="SnackbarOne" />
</Grid>
</MetroWindow>
MainWindow在其构造函数上分配了其ViewModel
public MainWindow()
{
InitializeComponent();
DataContext = new MainWindowViewModel();
}
输出显示以下错误:
System.Windows.Data Error: 4 : Cannot find source for binding with reference 'ElementName=SnackbarOne'. BindingExpression:Path=IsActive; DataItem=null; target element is 'Button' (Name=''); target property is 'CommandParameter' (type 'Object')
和命令在触发时接收参数null。
以这种方式修复:
<Button CommandParameter="{Binding Source={x:Reference SnackbarOne}}" Command="{Binding CrearAlertaCommand}">