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