MVVM Basic ContentControl绑定

时间:2016-01-11 03:32:14

标签: c# wpf mvvm

我正在试图弄清楚将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',它的类型为string,因此应该实现唯一的DataTemplate并显示一个Textbox。 / p>

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

这意味着我在Batabinding中犯了一个错误,但我不知道在哪里。我有一种感觉,只是因为我的DataTemplate正在显示一个文本框,实际上没有任何东西将字符串绑定到它,但这就是我迷失的一点。

感谢您提供任何帮助/建议。

2 个答案:

答案 0 :(得分:1)

您还没有指定TextBox的Text绑定,它与DataContext完全分开。由于您希望TextBox绑定到自己的DataContext,只需执行以下操作:

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

答案 1 :(得分:0)

使用如下文本框:

<TextBox Text="{Binding}" />