我正在试图弄清楚将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正在显示一个文本框,实际上没有任何东西将字符串绑定到它,但这就是我迷失的一点。
感谢您提供任何帮助/建议。
答案 0 :(得分:1)
您还没有指定TextBox的Text
绑定,它与DataContext完全分开。由于您希望TextBox绑定到自己的DataContext,只需执行以下操作:
<TextBox Text="{Binding Path=.}"/>
答案 1 :(得分:0)
使用如下文本框:
<TextBox Text="{Binding}" />