作为将DataContext与WPF中的另一个属性链接的问题的延续.
在研究的最后,我非常惊讶地发现当一个人写这样的东西时:
<Label Content="{Binding Path=Name}" />
Run Code Online (Sandbox Code Playgroud)
在DataContext其对Content性能的绑定是的Label控制本身!它仍然有效的事实是由于最近父级的DataContext值的默认继承.
但是,如果您将此标签包装在自定义控件中,并且您不希望将数据绑定到该DataContext控件的属性,那么您可能更喜欢:
<Controls:SearchSettings Settings="{Binding Path=Settings}" />
Run Code Online (Sandbox Code Playgroud)
你在这里.现在,你需要设置Settings为DataContext为SearchSettings控制,对Label内部绑定反对,但你不能,因为这会触发重新绑定的Settings属性.
我看不到在使用不同来源的混合绑定属性点:DataContext通过ElementName等,那么,为什么我会永远使用DataContext?
我正在使用Visual Studio 2013的设计器在WPF中创建我的用户控件,而我正在使用MVVM方法.
我正在尝试找到设置我的viewmodel"Design-Time"的最佳方法,以便我立即看到设计师在更改属性值时的效果.我使用了不同的设计和技术来支持这一点,但没有什么是我想要的.我想知道是否有人有更好的想法......
情况(简化):所以我有一个"设备",我希望UserControl显示状态和操作.从上到下:
bool IsConnected {get;}(和状态变化的适当通知)IsChecked={Binding IsConnected, Mode=OneWay框架:
d:DataContext="{Binding DeviceViewModelDesignTime, Source={StaticResource ViewModelLocator}}"
public class ViewModelLocator
{
private static MainWindowViewModel _mainWindowViewModel;
public MainWindowViewModel MainWindowViewModelMainInstance
{
get
{
if (_mainWindowViewModel == null)
{
_mainWindowViewModel = new MainWindowViewModel();
}
return _mainWindowViewModel;
}
}
public DeviceViewModel DeviceViewModelDesignTime
{
get
{
//Custom initialization of the dependencies here
//Could be to create a FakeDeviceModel and assign to constructor
var deviceViewModel = new DeviceViewModel(); …Run Code Online (Sandbox Code Playgroud) 我是MVVM的新手,我理解MVVM的一些好处,而不是xaml背后的简单代码(例如VM的可测试性).我们正在使用Caliburn Micro来执行某些绑定,但这有点无关紧要,我可以使用特定的绑定{绑定...},我的问题或多或少会保持不变.
我理解VM如果一切都正确完成就不应该知道V的逻辑,但似乎因为我们在V和VM之间使用动态运行时绑定,编译器无法检查每个绑定的合法性表达.例如,如果我有一个名为UserName的UI组件,然后将卡利尝试绑定,要叫用户名在运行时VM性能(类似于做这样的事情的价值="{绑定用户名}").但是,如果我重命名我的VM属性或拼错UI组件名称或绑定表达式,我们在运行时之前没有任何问题的迹象.
在我看来,能够告诉xaml UI组件或页面将被绑定到特定接口将是非常好的,这样编译器就可以完成一些必须完成的工作(由测试部门(这是我经常).
有没有办法告诉xaml我们绑定到接口或对象类型?是否有一些工具可以插入xaml应用程序来验证绑定?