我做了一个尽可能简单的例子。
我有一个ViewModelMain类,它将实现几个viewmodel。
我试图将我的滑块值绑定(bind)到ViewModelMain中的viewmodel上。
这是我的代码:

MainWindow.xaml.cs
我在这里设置数据上下文,不知道这是否真的是一个好主意。

public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
        VMMain vm = new VMMain();
        this.DataContext = vm;
    }
}

MainWindow.xaml
<Window x:Class="WpfApplication1.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    Title="MainWindow" Height="350" Width="525">
<Grid>
    <Slider Height="23"  Name="page_slider"  Width="100" Value="{Binding Path=p.NbrLine}"  HorizontalAlignment="Stretch" VerticalAlignment="Stretch" Minimum="0" Maximum="10"/>
    <TextBox Text="{Binding Value, ElementName=page_slider, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" Height="28" HorizontalAlignment="Stretch"  Name="Voiture1Label" VerticalAlignment="Stretch" Margin="0,110,0,172"></TextBox>
</Grid></Window>

ViewModelMain.cs
ViewModelBase:实现INotifyPropertyChanged的类
ModelPage:我的模型
MyPage:我的 subview 模式,它是ModelPage的 View 模型
ViewModelMain:我的最终viewmodel,它将实现更多viewmodel
public class ViewModelBase : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected virtual void OnPropertyChanged(string propName)
    {
        if (PropertyChanged != null)
        {
            PropertyChanged(this, new PropertyChangedEventArgs(propName));
        }
    }
}

public class ModelPage
{
    public int NbrLine { get; set; }
    public int NbrCapsLock { get; set; }
}

public class MyPage : ViewModelBase
{
    private ModelPage _model;

    public MyPage(ModelPage m)
    {
        _model = m;
    }
    public int NbrLine
    {
        get { return (_model.NbrLine); }
        set
        {
            if (_model.NbrLine == value) return;
            _model.NbrLine = value;
            OnPropertyChanged("NbrLine");
        }
    }

    public int NbrCapsLock
    {
        get { return (_model.NbrCapsLock); }
        set
        {
            if (_model.NbrCapsLock == value) return;
            _model.NbrCapsLock = value;
            OnPropertyChanged("NbrCapsLock");
        }
    }
}

public class ViewModelMain
{
    public MyPage p;

    public ViewModelMain()
    {
        p = new MyPage(new ModelPage(){NbrLine = 5, NbrCapsLock = 1});
    }
}

当我启动它时,我的滑块仍然在0上不明白为什么它不在5上。

最佳答案

p是一个字段,而不是属性。您应该只绑定(bind)到属性:

public MyPage p { get; set; }

10-08 05:58