【问题标题】:How do I prompt a new Window showing the model data from the selected item?如何提示一个新窗口显示所选项目的模型数据?
【发布时间】:2019-06-19 15:32:44
【问题描述】:

我的目标是在ItemsControl 中右键单击一个项目并在ContextMenu 中选择Edit 时显示一个新窗口

这是我目前所拥有的。 我有我的MainWindow.xaml,这将是应用程序的 MainView 在那个视图上,我有一个ItemsControlUserCardDataTemplate,这是一个自定义的UserControl

ItemsControl 在我的 ViewModel 中有一个 ItemSource 设置为我的 ObservableCollection

我像这样在代码隐藏中设置 DataContext。

public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new BaseViewModel();
        }

这里是 XAML

<StackPanel>
        <Grid>
            <ItemsControl ItemsSource="{Binding CardViewModel.Users}"
                          dd:DragDrop.IsDragSource="True"
                          dd:DragDrop.IsDropTarget="True"
                          dd:DragDrop.UseDefaultEffectDataTemplate="True">
                <ItemsControl.ItemTemplate>
                    <DataTemplate>
                        <controls:UserCard>
                            <controls:UserCard.ContextMenu>
                                <!-- Bind the DataContext of the CM to the DataContext that's bound to the RootObject-->
                                <ContextMenu DataContext="{Binding DataContext, Source={local:RootObject}}">
                                    <MenuItem Header="Edit"
                                              Command="{Binding CardViewModel.EditUser}" 
                                              CommandParameter="{Binding PlacementTarget.Tag, RelativeSource={RelativeSource AncestorType=ContextMenu}}"/>
                                </ContextMenu>
                            </controls:UserCard.ContextMenu>
                        </controls:UserCard>
                    </DataTemplate>
                </ItemsControl.ItemTemplate>

            </ItemsControl>
        </Grid>

    </StackPanel>

现在它确实显示了两个 UserCard 控件,因为在 ViewModel 中我已将两个对象添加到它的集合中,它是 ItemSource 的派生对象。

但是,当我单击ContextMenu 中的MenuItem 时,我想打开一个显示TextBlock 控件的新窗口,它们应该绑定到与我的模型不同的属性。

我不知道如何将该模型传递到新窗口

这里是用户控件

    <TextBlock Text="{Binding Description}"
                   TextWrapping="Wrap"
                   Width="180"
                   VerticalAlignment="Top"
                   Margin="10"
                   FontFamily="Consolas"/>


    <TextBlock Width="100"
                   Height="20"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Right"
                   Margin="5"
                   Text="{Binding Name}"
                   FontFamily="Consolas" />


    <TextBlock Width="100"
                   Height="20"
                   VerticalAlignment="Bottom"
                   HorizontalAlignment="Left"
                   Text="{Binding Id}"
                   FontFamily="Consolas"/>
</Grid>

那里的绑定工作得很好!我可以在我的 ItemsControl MainWindow 中看到名称和所有内容,但是当我右键单击 UserControl 并显示新窗口时,我不知道如何传递它。

NewWindow.xaml

<Grid>
        <TextBlock Height="25" Text="{Binding SelectedItemViewModel.Name}"/>
    </Grid>

视图模型

class BaseViewModel : ObservableObject
{
    public CardViewModel CardViewModel { get; set; } = new CardViewModel();
}

【问题讨论】:

    标签: c# .net wpf mvvm data-binding


    【解决方案1】:

    您正在绑定到SelectedItemViewModel.Name,但我在视图模型中看不到此属性...

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2012-09-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2021-06-20
      • 1970-01-01
      相关资源
      最近更新 更多