gpt4 book ai didi

c# - Resharper 无法识别正确的 ViewModel 类型

转载 作者:行者123 更新时间:2023-11-30 12:30:56 28 4
gpt4 key购买 nike

我们正在使用 Resharper,当然我们想利用 Resharper 的 xaml intellisense。

我们 View 的数据上下文绑定(bind)到 ViewModelBase 类型的 CurrentViewmodel 属性。在运行时,此属性设置为继承自 ViewModelBase 的 View 模型。

我已经在 View 模型中添加了这些行以设置正确的类型:

xmlns:vms="clr-namespace:PQS.ViewModel.Report"
d:DataContext="{d:DesignInstance vms:ReportFilterViewModel, IsDesignTimeCreatable=False}"

但是 Resharper 仍然继续在 ViewModelbase 中寻找属性。

我还能尝试什么?

一些代码:

设置数据上下文:

<UserControl.DataContext>
<Binding Path="ReportMainViewModel.CurrentVm" Source="{StaticResource Locator}"/>
</UserControl.DataContext>

绑定(bind)某些东西(Products 是 ReportFilterViewmodel 上的一个属性,r# 一直在 ViewModelBase 中寻找它):

<ListBox   ItemsSource="{Binding Products.View}" Background="White" DisplayMemberPath="Name.ActualTranslation">
</ListBox>

最佳答案

R# 无法静态地找到将在运行时可用的具体 View 模型类型,因此您需要像这样手动注释数据上下文类型:

using System.Collections.Generic;

public partial class MainWindow {
public MainWindow() {
Current = new ConcreteViewModel {
Products = {
new Product(),
new Product()
}
};

InitializeComponent();
}

public ViewModelBase Current { get; set; }
}

public class ViewModelBase { }
public class ConcreteViewModel : ViewModelBase {
public ConcreteViewModel() {
Products = new List<Product>();
}

public List<Product> Products { get; private set; }
}

public class Product {
public string ProductName { get { return "Name1"; } }
}

和 XAML 部分:

<Window x:Class="MainWindow" x:Name="MainWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
xmlns:global="clr-namespace:" mc:Ignorable="d"
DataContext="{Binding ElementName=MainWin, Path=Current}">
<!-- here the type of data context is ViewModelBase -->
<Grid d:DataContext="{d:DesignInstance global:ConcreteViewModel}">
<!-- and here is ConcreteViewModel -->
<ListBox ItemsSource="{Binding Path=Products}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>

或者像这样:

<Window x:Class="MainWindow" x:Name="MainWin"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
xmlns:global="clr-namespace:"
DataContext="{Binding ElementName=MainWin, Path=Current}">
<Grid>
<ListBox ItemsSource="{Binding Path=(global:ConcreteViewModel.Products)}">
<ListBox.ItemTemplate>
<DataTemplate>
<TextBlock Text="{Binding ProductName}"/>
</DataTemplate>
</ListBox.ItemTemplate>
</ListBox>
</Grid>
</Window>

关于c# - Resharper 无法识别正确的 ViewModel 类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15021487/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com