相关疑难解决方法(0)

什么是DataContext?

作为将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)

你在这里.现在,你需要设置SettingsDataContextSearchSettings控制,对Label内部绑定反对,但你不能,因为这会触发重新绑定的Settings属性.

我看不到在使用不同来源的混合绑定属性点:DataContext通过ElementName等,那么,为什么我会永远使用DataContext

data-binding wpf

33
推荐指数
1
解决办法
5万
查看次数

ViewModel的设计时设置

我正在使用Visual Studio 2013的设计器在WPF中创建我的用户控件,而我正在使用MVVM方法.

我正在尝试找到设置我的viewmodel"Design-Time"的最佳方法,以便我立即看到设计师在更改属性值时的效果.我使用了不同的设计和技术来支持这一点,但没有什么是我想要的.我想知道是否有人有更好的想法......

情况(简化):所以我有一个"设备",我希望UserControl显示状态和操作.从上到下:

  • 我有一个IDeviceModel,它有一个字段bool IsConnected {get;}(和状态变化的适当通知)
  • 我有一个实现IDeviceModel的FakeDeviceModel,因此我可以不依赖于真实设备进行设计时和测试
  • DeviceViewModel,包含IDeviceModel,并封装模型的属性.(是的,它有正确的INotifyPropertyChanged通知)
  • 我的UserControl将具有类型为DeviceViewModel的DataContext,并且将具有自定义样式的CheckBox,它是 IsChecked={Binding IsConnected, Mode=OneWay
  • 我的目标:我想在设计时预览Model的IsConnected状态如何影响我的UserControl(所以它可能会影响除IsChecked之外的其他事情)

框架:

  • 我使用MVVM Light ViewModelLocator的想法,返回非静态字段(因此ViewModels的新实例).在运行时,真实的datacontext将由实现此UserControl的那个给出

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)

wpf blend mvvm visual-studio-2013

13
推荐指数
1
解决办法
5755
查看次数

编译绑定的时间检查?

我是MVVM的新手,我理解MVVM的一些好处,而不是xaml背后的简单代码(例如VM的可测试性).我们正在使用Caliburn Micro来执行某些绑定,但这有点无关紧要,我可以使用特定的绑定{绑定...},我的问题或多或少会保持不变.

我理解VM如果一切都正确完成就不应该知道V的逻辑,但似乎因为我们在V和VM之间使用动态运行时绑定,编译器无法检查每个绑定的合法性表达.例如,如果我有一个名为UserName的UI组件,然后将卡利尝试绑定,要叫用户名在运行时VM性能(类似于做这样的事情的价值="{绑定用户名}").但是,如果我重命名我的VM属性或拼错UI组件名称或绑定表达式,我们在运行时之前没有任何问题的迹象.

在我看来,能够告诉xaml UI组件或页面将被绑定到特定接口将是非常好的,这样编译器就可以完成一些必须完成的工作(由测试部门(这是我经常).

有没有办法告诉xaml我们绑定到接口或对象类型?是否有一些工具可以插入xaml应用程序来验证绑定?

silverlight wpf xaml binding mvvm

5
推荐指数
1
解决办法
1448
查看次数