Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/wpf/14.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
MVVM:在WPF中将带有集合的命令绑定到Listbox_Wpf_Mvvm - Fatal编程技术网

MVVM:在WPF中将带有集合的命令绑定到Listbox

MVVM:在WPF中将带有集合的命令绑定到Listbox,wpf,mvvm,Wpf,Mvvm,我有一个列表框,在它的项目模板中有不同的控件,如按钮、文本框等,我有一个集合,我用listbox绑定它,它工作得很好,但现在我想将代码移动到MVVM,我在视图模型中为按钮的点击事件编写一些命令,我如何将我的集合+我的命令绑定到列表框???因为命令不在集合中,所以这是“我的列表框”的数据模板 <DataTemplate x:Key="listItemTemplate"> <Grid ShowGridLines="False"> <Grid.Ro

我有一个列表框,在它的项目模板中有不同的控件,如按钮、文本框等,我有一个集合,我用listbox绑定它,它工作得很好,但现在我想将代码移动到MVVM,我在视图模型中为按钮的点击事件编写一些命令,我如何将我的集合+我的命令绑定到列表框???因为命令不在集合中,所以这是“我的列表框”的数据模板

<DataTemplate x:Key="listItemTemplate">
    <Grid ShowGridLines="False">
        <Grid.RowDefinitions>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
            <RowDefinition></RowDefinition>
        </Grid.RowDefinitions>
        <DockPanel Grid.Row="0" Name="commentsPanel" LastChildFill="False" MinWidth="350">
            <TextBlock  Name="txtUserName" IsEnabled="False" Text="{Binding UserName}" 
                      Width="Auto" DockPanel.Dock="Left" Foreground="GhostWhite" Margin="0,6,0,0"></TextBlock>

            <TextBlock Name="txtDate" IsEnabled="False" Text="{Binding CreateDt}"
                      Width="Auto" DockPanel.Dock="Left" Foreground="Green" Margin="4,6,0,0"></TextBlock>

            <StackPanel DockPanel.Dock="Right" Orientation="Horizontal" Width="{Binding EditPanelWidth}" x:Name="EditDeletePanel" Visibility="{Binding ButtonVisibilityText }">
                <Button Name="btnEdit" Content="Edit" Width="Auto" DockPanel.Dock="Right" Height="20"
                  Click="btnEdit_Click_1" Margin="4,4,0,4" Foreground="GhostWhite" VerticalContentAlignment="Top" Visibility="{Binding ButtonVisibilityText}"></Button>

                <Button Name="btnDelete" Content="Delete" Width="Auto" Height="20" VerticalContentAlignment="Top" DockPanel.Dock="Right" Visibility="{Binding ButtonVisibilityText}"
                Click="btnDelete_Click_1" Margin="4"></Button>

            </StackPanel>

            <StackPanel DockPanel.Dock="Right" Orientation="Horizontal" x:Name="SaveCancelPanel" Visibility="{Binding CancelSaveEnableText}">
                <Button Name="btnSave" Content="Save" Width="Auto" Height="20" DockPanel.Dock="Right" 
                Click="btnSave_Click_1" Margin="4"></Button>

                <Button Name="btnCancel" Content="Cancel" Height="20" Width="Auto" DockPanel.Dock="Right" 
                Click="btnCancel_Click_1" Margin="4"></Button>

            </StackPanel>
        </DockPanel>
        <dxe:TextEdit ShowBorder="False" Grid.Row="1" Name="txtComment" Width="Auto" Foreground="Red"  
                  TextWrapping="WrapWithOverflow" EditValue="{Binding Note}" IsEnabled="{Binding IsCommentTextEnable}">

        </dxe:TextEdit>
        <dxe:TextEdit Text=".............." Grid.Row="2" ShowBorder="False" IsEnabled="False">

        </dxe:TextEdit>
    </Grid>
</DataTemplate>

这是我想要绑定到按钮的集合+我的命令

public ICommand CancelCommand
{
    get { return _cancelCommand ?? (_cancelCommand = new CommandHandler(Cancel)); }
    set { _cancelCommand = value; }
}



public TList<ProgramNote> NotesCollection
{
    get { return _notes; }
    set
    {
        _notes = value;
        RaisePropertyChanged("NotesCollection");
    }
}
public ICommand cancel命令
{
获取{return _cancelCommand???(_cancelCommand=newcommandhandler(Cancel));}
设置{u cancelCommand=value;}
}
公共TList Notes集合
{
获取{return\u notes;}
设置
{
_注释=价值;
RaisePropertyChanged(“票据集合”);
}
}
我知道我可以使用此代码将命令与按钮绑定

<Button Command={Binding CancelCommand}

回答新用户的问题总是很困难的,因为他们总是在问题中遗漏重要信息。但是,从您的问题文本判断,我觉得您似乎已将集合属性设置为
窗口的
数据上下文
。如果要将数据绑定到命令,则需要将
DataContext
更改为包含集合和命令的对象。。。视图模型的实例:

DataContext = new YouViewModel();
既然
DataContext
已设置为视图模型的一个实例,您就可以像您向我们展示的那样将数据绑定到其属性:

<Button Command="{Binding CancelCommand}" />

这应该超出集合的范围,查看
窗口的
DataContext
,因此如果您已将视图模型的实例设置为
窗口。DataContext
,这应该行得通。

回答新用户的问题总是很困难,因为他们总是在问题中遗漏重要信息。但是,从您的问题文本判断,我觉得您似乎已将集合属性设置为
窗口的
数据上下文
。如果要将数据绑定到命令,则需要将
DataContext
更改为包含集合和命令的对象。。。视图模型的实例:

DataContext = new YouViewModel();
既然
DataContext
已设置为视图模型的一个实例,您就可以像您向我们展示的那样将数据绑定到其属性:

<Button Command="{Binding CancelCommand}" />

这应该超出集合的范围,查看
窗口的
DataContext
,因此如果您已将视图模型的实例设置为
窗口。DataContext
,这应该行得通。

回答新用户的问题总是很困难,因为他们总是在问题中遗漏重要信息。但是,从您的问题文本判断,我觉得您似乎已将集合属性设置为
窗口的
数据上下文
。如果要将数据绑定到命令,则需要将
DataContext
更改为包含集合和命令的对象。。。视图模型的实例:

DataContext = new YouViewModel();
既然
DataContext
已设置为视图模型的一个实例,您就可以像您向我们展示的那样将数据绑定到其属性:

<Button Command="{Binding CancelCommand}" />

这应该超出集合的范围,查看
窗口的
DataContext
,因此如果您已将视图模型的实例设置为
窗口。DataContext
,这应该行得通。

回答新用户的问题总是很困难,因为他们总是在问题中遗漏重要信息。但是,从您的问题文本判断,我觉得您似乎已将集合属性设置为
窗口的
数据上下文
。如果要将数据绑定到命令,则需要将
DataContext
更改为包含集合和命令的对象。。。视图模型的实例:

DataContext = new YouViewModel();
既然
DataContext
已设置为视图模型的一个实例,您就可以像您向我们展示的那样将数据绑定到其属性:

<Button Command="{Binding CancelCommand}" />

这应该超出集合的范围,查看
窗口的
DataContext
,因此如果您已将视图模型的实例设置为
窗口。DataContext
,这应该可以工作。

您可以通过找到适当的视图模型将命令绑定到数据模板按钮等

范例

 <DataTemplate x:Key="listItemTemplate">
    <Button Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=LixtBox}}" 
            CommandParameter="{Binding}">
 </DataTemplate>

通过查找适当的viewmodel,可以将命令绑定到数据模板按钮等

范例

 <DataTemplate x:Key="listItemTemplate">
    <Button Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=LixtBox}}" 
            CommandParameter="{Binding}">
 </DataTemplate>

通过查找适当的viewmodel,可以将命令绑定到数据模板按钮等

范例

 <DataTemplate x:Key="listItemTemplate">
    <Button Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=LixtBox}}" 
            CommandParameter="{Binding}">
 </DataTemplate>

通过查找适当的viewmodel,可以将命令绑定到数据模板按钮等

范例

 <DataTemplate x:Key="listItemTemplate">
    <Button Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=LixtBox}}" 
            CommandParameter="{Binding}">
 </DataTemplate>

谢谢大家,特别是谢谢@Sheridan和@PushPraj,我现在可以做了,这是我有一个按钮的数据模板代码

<Button Name="btnCancel" Content="Cancel" Height="20" Width="Auto" DockPanel.Dock="Right" 
                        Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxe:ListBoxEdit}}"
                               CommandParameter="{Binding}" Margin="4"></Button>

谢谢大家,特别是谢谢@Sheridan和@PushPraj,我现在可以做了,这是我有一个按钮的数据模板代码

<Button Name="btnCancel" Content="Cancel" Height="20" Width="Auto" DockPanel.Dock="Right" 
                        Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxe:ListBoxEdit}}"
                               CommandParameter="{Binding}" Margin="4"></Button>

谢谢大家,特别是谢谢@Sheridan和@PushPraj,我现在可以做了,这是我有一个按钮的数据模板代码

<Button Name="btnCancel" Content="Cancel" Height="20" Width="Auto" DockPanel.Dock="Right" 
                        Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxe:ListBoxEdit}}"
                               CommandParameter="{Binding}" Margin="4"></Button>

谢谢大家,特别是谢谢@Sheridan和@PushPraj,我现在可以做了,这是我有一个按钮的数据模板代码

<Button Name="btnCancel" Content="Cancel" Height="20" Width="Auto" DockPanel.Dock="Right" 
                        Command="{Binding DataContext.CancelCommand, RelativeSource={RelativeSource Mode=FindAncestor, AncestorType=dxe:ListBoxEdit}}"
                               CommandParameter="{Binding}" Margin="4"></Button>

是否需要“每项”命令,该命令可在列表框中为每个项呈现的按钮上触发,例如删除、编辑等?或者你想要