C# ViewModel属性绑定的单向DependencyProperty

C# ViewModel属性绑定的单向DependencyProperty,c#,wpf,mvvm,binding,C#,Wpf,Mvvm,Binding,我有一个带有依赖属性的UserControl,我需要将此属性绑定到父视图模型中的CLR属性。我编写了一个小应用程序来演示这个问题 用户控制 <UserControl ... x:Name="usr"> <Grid> <TextBox Text="{Binding SomeProperty, ElementName=usr}"/> </Grid> </UserControl&

我有一个带有依赖属性的
UserControl
,我需要将此属性绑定到父视图模型中的CLR属性。我编写了一个小应用程序来演示这个问题

用户控制

<UserControl 
         ...
         x:Name="usr">
    <Grid>
        <TextBox Text="{Binding SomeProperty, ElementName=usr}"/>
    </Grid>
</UserControl>
public class MainWindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _SomeText;

    public string SomeText
    {
        get { return _SomeText; }
        set 
        { 
            _SomeText = value;
            OnPropertyChanged();
        }
    }
}
父视图

<Window ... >
    <Window.DataContext>
        <ViewModels:MainWindowViewModel/>
    </Window.DataContext>

    <Grid>
        <Controls:UserControl1 SomeProperty="{Binding SomeText, Mode=OneWay, UpdateSourceTrigger=PropertyChanged}"/>
    </Grid>
</Window>
本质上,我需要的是用户控件的
TextBox
SomeProperty
属性)中输入的任何内容都需要更新ViewModel的
SomeText
属性

我不需要双向装订


为代码之海道歉,但如果有人想要它,它就在那里。

你需要模式=OneWayToSource@VictorMukherjee好。我今天学到了一些东西。如果您可以在文本更改时更新绑定属性,则可以获得额外的积分。我刚刚尝试了
NotifyOnSourceUpdated
,但似乎不起作用。当前,它仅在文本框失去焦点时更新。您的绑定中有
UpdateSourceTrigger=PropertyChanged
。这是在文本更改时立即更新VM绑定属性的正确方法。您确定在文本框中键入时没有执行该属性的设置程序吗?您需要在
中使用
UpdateSourceTrigger=PropertyChanged
,否则某些属性不会立即更新,因此某些文本也会更新。@LPL非常好。谢谢
public class MainWindowViewModel : INotifyPropertyChanged
{
    public event PropertyChangedEventHandler PropertyChanged;

    protected void OnPropertyChanged([CallerMemberName]string propertyName = null)
    {
        if (PropertyChanged != null)
            PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
    }

    private string _SomeText;

    public string SomeText
    {
        get { return _SomeText; }
        set 
        { 
            _SomeText = value;
            OnPropertyChanged();
        }
    }
}