MVVM基本内容控制绑定

本文关键字:绑定 内容控制 MVVM | 更新日期: 2023-09-27 18:29:41

我正在努力找出将ViewModel绑定到ContentControl的正确方法(我已经在网上找了很多,但找不到一个可以正确工作的例子)。

我的型号:

public class Model
{
    private string _Variable = "TEST";
    public string Variable
    {
        get { return _Variable; }
        set { _Variable = value; }
    }
}

我的ViewModel

public class ViewModel :ViewModelBase
{
    private Model _Model = new Model();
    public string Variable
    {
        get { return _Model.Variable; }
        set
        {
            if (_Model.Variable != value)
            {
                _Model.Variable = value;
                RaisePropertyChanged("Variable");
            }
        }
    }

我的视图/窗口

<Window.DataContext>
    <local:ViewModel />
</Window.DataContext>
<Window.Resources>
    <DataTemplate DataType="{x:Type System:String}">
        <TextBox/>
    </DataTemplate>
</Window.Resources>
<StackPanel>
    <ContentControl Content="{Binding Path=Variable}" />
</StackPanel>

因此,从本质上讲,我已经(或者至少我相信我已经)将ContentControl的内容设置为ViewModel属性"Variable",它是字符串类型,因此应该实现唯一的DataTemplate并显示一个Textbox。

这种情况发生了。。。将显示一个文本框!但是,文本框是空的,所做的任何更改都不会影响变量。

这意味着我在巴塔绑定中犯了一个错误,但我不知道在哪里。我有一种感觉,仅仅因为我的DataTemplate显示了一个Textbox,实际上没有任何东西将字符串绑定到它上,但这是我迷失的地方。

谢谢你的帮助/建议。

MVVM基本内容控制绑定

您还没有指定TextBox的Text绑定,它与DataContext完全分离。既然你想让TextBox绑定到它自己的DataContext,那就这样做:

<TextBox Text="{Binding Path=.}"/>

使用如下文本框:

<TextBox Text="{Binding}" />