我将UI绑定到接口(由几个演示者实现,无法从UI程序集访问).
我非常喜欢设计师中的D:DesignInstance,因为它(有点)使用R#强力键入xaml.
遗憾的是,d:DesignInstance不支持接口类型:"无法创建接口实例."

我想到的第一件事是:好的,没问题,让我们创建一个自定义标记扩展,它将System.Type作为参数,以及哪个ProvideValue方法返回它的假实例(此接口的虚拟实现,由动态IL发射生成) .
这很好用,绑定在设计时解决(我可以在设计面板中看到,因为我的标记扩展用lorem-ipsum填充了对象属性)
但最好的R#功能不起作用:Resharper无法识别datacontext类型,只是在"object"类型的数据上下文中给出了"无法解析属性'{0}"的消息

有人知道如何解决这个问题吗?
(允许我让R#了解接口datacontext类型的任何替代方案都会很棒)
谢谢 !
ps:我还尝试创建另一个标记扩展,它返回生成的运行时类型,以便将其提供给DesignInstance:"{d:DesignInstance Type = {utilsUi:InstanceType commons:User}}"=>给出错误"对象的类型"InstanceType"无法转换为"System.Type"类型"......似乎DesignInstance不支持内部标记扩展:(
在ListBox我有一个ItemContainer的IsSelected属性绑定到我的ViewModel的IsSelected属性使用<ListBox.ItemContainerStyle>语法.
它工作正常,但我得到一个Resharper警告:
无法在"FooSolution.BarViewModel"类型的数据上下文中解析属性"IsSelected".
如何在ListBox ItemContainer上指定指定DataContext类型以消除此警告?
这是代码.我有一BarViewModel节课:
public ObservableCollection<FooViewModel> FooItems { get;set; }
Run Code Online (Sandbox Code Playgroud)
BarViewModel 被分配给Control中包含ListBox的DataContext
并且FooViewModel,如下所示:
public bool IsSelected
{
get
{
return isSelected;
}
set
{
if (isSelected == value)
{
return;
}
isSelected = value;
RaisePropertyChanged(() => IsSelected);
}
}
Run Code Online (Sandbox Code Playgroud)
和XAML这样:
<ListBox ItemsSource="{Binding FooItems}" SelectionMode="Multiple">
<ListBox.ItemContainerStyle>
<Style TargetType="{x:Type ListBoxItem}">
<Setter Property="IsSelected" Value="{Binding IsSelected}" />
</Style>
</ListBox.ItemContainerStyle>
</ListBox>
Run Code Online (Sandbox Code Playgroud)
更新
我尝试d:DataContext使用setC进行设置,正如HighCore所建议的那样,但不幸的是,它没有帮助,甚至打破了构建:
<Setter Property="d:DataContext" Value="{d:DesignInstance yourxmlns:yourItemViewModelClass}"/>
Run Code Online (Sandbox Code Playgroud)
(抛出:错误1标签'DesignInstance'在XML命名空间'schemas.microsoft.com/expression/blend/2008'中不存在;;第31行位置50.)
更新2 …