使用UserControl在Listview中使用DelegateCommand

时间:2013-10-10 15:50:04

标签: c# wpf listview user-controls

是否有任何方法可以在我的DelegateCommand ListViewUserControl使用<UserControl x:Class="App13.UserControls.ItemTemplateControl" xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation" xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml" xmlns:local="using:App13" xmlns:d="http://schemas.microsoft.com/expression/blend/2008" xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006" d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=True}" mc:Ignorable="d"> <Grid> <Button Content="Click" Command="{Binding OpenCommand"/> </Grid> </UserControl>

用户控件:

MainViewModel

我的OpenCommand没有错误。绑定中存在错误。 我可以使用以下代码在MainPage xaml中轻松使用 d:DataContext="{d:DesignInstance Type=local:MainViewModel, IsDesignTimeCreatable=True}" <Button Content="Click" Command="{Binding OpenCommand"/>

OpenCommnad

如何将 <ListView x:Name="peopleListBox"> <ListView.ItemTemplate> <DataTemplate> <Grid> <UserControls:ItemTemplateControl/> </Grid> </DataTemplate> </ListView.ItemTemplate> </ListView> 绑定到UserControl? 对不起我的英文,并提前致谢!

这是我的ListView:

{{1}}

2 个答案:

答案 0 :(得分:0)

在构建UserControl时

this.DataContext = new MainViewModel();

d:DataContext只是设计时DataContext设置,不会在运行时应用。

答案 1 :(得分:0)

以它的名字命名,DesignInstance用于设计时而非运行时。

在MVVM中,设置ViewModel有两种方法。

ViewFirst ViewModelFirst - 取决于您自上而下或自下而上构建应用。

for ViewFirst 您可以从xaml设置DataContext

<UserControl
x:Class="App13.UserControls.ItemTemplateControl"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:local="using:App13"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
mc:Ignorable="d">
<UserControl.DataContext>
     <local:MainViewModel/>
</UserControl.DataContext>

     <!-- Rest of your implementation ... -->  

</UserControl>

对于 ViewModelFirst ,在后面的代码中设置它(通常从View的构造函数中完成)

this.DataContext = new MainViewModel();

如果要将viewModel中的属性绑定到ListBox中的项目,请将按钮绑定到UserControl内,如下所示:

        <Button Content="Click" 
            Command="{Binding DataContext.OpenCommand,
                          RelativeSource={RelativeSource AncestorType={x:Type ListView}}}"
            />

希望这有帮助