Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 在materialDesign对话框内的按钮中绑定WPF命令_C#_Wpf_Xaml_Data Binding_Material Design In Xaml - Fatal编程技术网

C# 在materialDesign对话框内的按钮中绑定WPF命令

C# 在materialDesign对话框内的按钮中绑定WPF命令,c#,wpf,xaml,data-binding,material-design-in-xaml,C#,Wpf,Xaml,Data Binding,Material Design In Xaml,我是WPF和材料设计的新手。我正试图创建一个对话框来确认一个按钮,但是当我绑定命令并按下按钮时,它永远不会到达方法 该对话框是在动态填充的列表框中创建的 窗口 <ListBox Height="585" Name="NoteList" ScrollViewer.CanContentScroll="True" ScrollViewer.VerticalScrollBarVisibility="Visible"

我是WPF和材料设计的新手。我正试图创建一个对话框来确认一个按钮,但是当我绑定命令并按下按钮时,它永远不会到达方法

该对话框是在动态填充的列表框中创建的

窗口

   <ListBox  Height="585" 
         Name="NoteList"
         ScrollViewer.CanContentScroll="True"
         ScrollViewer.VerticalScrollBarVisibility="Visible" 
         ScrollViewer.HorizontalScrollBarVisibility="Disabled"   
         ItemsSource="{Binding dtoRecetas}" Grid.Row="1">

        <ListBox.ItemTemplate>
            <DataTemplate>

               <!--VERSION CARTAS-->
               <materialDesign:Card Style="{StaticResource cardsRecetas}" >
                  <Grid>
                      <Grid.RowDefinitions>
                           <RowDefinition Height="150"/>
                            <RowDefinition Height="170"/>
                       </Grid.RowDefinitions>

                       <StackPanel Orientation="Horizontal" HorizontalAlignment="Right">

                          <!-- DIALOGO DE ELIMINAR RECETA-->
                          <materialDesign:DialogHost  CloseOnClickAway="True" >
                             <materialDesign:DialogHost.DialogContent>
                                 <StackPanel Margin="16">
                                    <TextBlock>Deseas eliminar esta receta</TextBlock>

                                    <StackPanel Orientation="Horizontal"  HorizontalAlignment="Right">

                                       <Button Style="{StaticResource MaterialDesignFlatButton}"
                                                        IsDefault="True"
                                                        Margin="0 8 8 0"
                                                        Command="{Binding Path=comandoDeleteReceta}"
                                                        CommandParameter="{Binding idReceta}">
                                                    Aceptar
                                       </Button>

                                      <Button Style="{StaticResource MaterialDesignFlatButton}"
                                                        Margin="0 8 8 0"
                                                        Command="{x:Static materialDesign:DialogHost.CloseDialogCommand}">
                                              Cancelar
                                       </Button>
                                     </StackPanel>

                                    </StackPanel>
                              </materialDesign:DialogHost.DialogContent>

                             <Button x:Name="btnDeleteReceta" Style="{StaticResource btnDeleteReceta}" 
                                        Tag="{Binding idReceta}"
                                        Command="{x:Static materialDesign:DialogHost.OpenDialogCommand}">

                                   <materialDesign:PackIcon Kind="RemoveCircle" />

                                </Button>
                          </materialDesign:DialogHost>

                       </StackPanel>


                    </Grid>
                </materialDesign:Card>

            </DataTemplate>

            </ListBox.ItemTemplate>
            <ListBox.ItemsPanel>
                <ItemsPanelTemplate>
                    <WrapPanel  ScrollViewer.VerticalScrollBarVisibility="Visible" ScrollViewer.HorizontalScrollBarVisibility="Disabled"  ></WrapPanel>
                </ItemsPanelTemplate>
            </ListBox.ItemsPanel>
        </ListBox>

以利米纳酒店
接受器
取消者
视图模型

 public class VerRecetasViewModel : BaseViewModel 
    {
        public Command comandoDeleteReceta { get; set; }
        public ObservableCollection<DTOReceta> dtoRecetas { get; set; }

        public VerRecetasViewModel()
        {
            RecetasController recController = new RecetasController();
            dtoRecetas = new ObservableCollection<DTOReceta>(recController.getAllRecetas());

            comandoDeleteReceta = new Command();
            comandoDeleteReceta.CanExecuteFunc = obj => true;
            comandoDeleteReceta.ExecuteFunc = deleteReceta;
        }



        public void deleteReceta(object parameter)
        {
            int idReceta = (int)parameter;
            RecetasController recController = new RecetasController();
            recController.deleteReceta(idReceta);
        }


    }
公共类VerreceitasViewModel:BaseViewModel
{
公共命令comandodeleterecta{get;set;}
公共可观测集合dtoRecetas{get;set;}
公共VerreceitasViewModel()
{
ReceitasController recController=新的ReceitasController();
dtoRecetas=新的ObservableCollection(recController.getAllRecetas());
comandoDeleteReceta=新命令();
comandodeleterecta.CanExecuteFunc=obj=>true;
comandodeleterecta.ExecuteFunc=deleterecta;
}
public void deleteReceta(对象参数)
{
int idReceta=(int)参数;
ReceitasController recController=新的ReceitasController();
recController.deleteReceta(idReceta);
}
}
所需的行为是,当他们按下“Aceptar”时,它会进入“deleteReceta”方法,但现在看起来它似乎没有找到bind命令。

command类正在工作,我在其他窗口中以这种方式使用命令,它工作正常,我认为我正在从对话框中丢失上下文或创建错误的对话框。我尝试了这种方法,并将相对源添加到绑定中,但我不知道ancestortype应该是什么


谢谢你的帮助。

我认为这是DataContext的问题。因此,我将视图的dataContext设置为:
d:DataContext=“{d:DesignInstance{x:Type vm:verrecestasviewmodel}”

在列表框中,按如下方式绑定按钮上的命令:

Command="{Binding DataContext.comandoDeleteReceta, RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type ItemsControl}}}"

希望这有帮助

这不是命令实现的问题,我已经在一个类命令中使用了它,略有不同,但它可以在其他windows和viewmodels中使用。我试过你的版本,但也没用。问题是按钮找不到命令或视图模型,我不知道如何将其数据上下文更改为视图模型或正确使用相对源。我已编辑了答案,请再次查看,如果有帮助,请告诉我:)成功了!非常感谢,我喜欢WPF,但是我在绑定方面做了很多努力。现在,我将idReceta作为命令参数访问,该命令参数位于集合的卡中(CommandParameter=“{Binding idReceta}”从现在开始)。我应该也使用这个相对的来源吗?再次感谢您的帮助!是的,你可以试试。我还认为,如果您尝试为菜谱编写一个ViewModel类,那么将来会更好,因此类似于
RecetaViewModel
VerRectasViewModel
的东西都有一个
列表。这样,您可以分别处理它们中的每一个,对它们执行操作的代码将在
RecetaViewModel
中处理。如果您想添加/删除,可以在
verrecestasviewmodel
中处理。希望它有意义