从datatemplate绑定到viewmodel的属性

时间:2017-08-15 11:08:02

标签: wpf xaml mvvm

我有以下资源字典:

<ResourceDictionary xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
                    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml">

    <DataTemplate x:Key="Sample">
        <StackPanel>
            <TextBlock Text="{Binding Data}" />
        </StackPanel>
    </DataTemplate>
</ResourceDictionary>

在我的主窗口中:

<Window.Resources>
    <ResourceDictionary Source="Dictionary.xaml" />
</Window.Resources>

<Grid>
    <ContentControl ContentTemplate="{StaticResource Sample}"/>
</Grid>

现在我该如何使绑定工作?我的窗口已经将datacontext设置为我的viewmodel,所以我认为它会工作,但没有。我没有看到它应用文本。

我的viewmodel有一个普通的属性:

public string Data { get; set; } = "Hello World";

但我没有看到它。

这是我的mainwindow.cs

public partial class MainWindow : Window
{

    public MainWindow()
    {
        InitializeComponent();
        DataContext = new ViewModel();
    }
}

现在我的viewmodel:

public class ViewModel {
  public string Data {get; set;} = "Hello World";
}

为了演示目的,整个代码保持非常简约。

修改

它仍然无法正常工作,这次是为了简单起见:

    public partial class MainWindow : Window
    {
        public string Data { get; set; } = "Hello World";



public MainWindow()
        {
            InitializeComponent();
DataContext = this;
        }
    }

不工作,我不明白。它没有意义吗?我已经像克莱门斯所解释的那样设置了xaml。

1 个答案:

答案 0 :(得分:1)

您还应该设置ContentControl的Content属性,如下所示。

除此之外,你应该通过ResourceDictionary.MergedDictionaries包含Dictionary.xaml,因为它允许有额外的&#34; local&#34;资源。

<Window.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="Dictionary.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Window.Resources>

<Grid>
    <ContentControl ContentTemplate="{StaticResource Sample}" Content="{Binding}"/>
</Grid>