WPF ContentControl DataTemplate不更新值

时间:2016-01-05 06:36:51

标签: wpf data-binding datatemplate

我不知道这里发生了什么。当我直接绑定到TextBox时,可以编辑值,但我想绑定ContentControl

为什么ContentControl不更新ViewModel?

<Window x:Class="WTFWPF.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:d="http://schemas.microsoft.com/expression/blend/2008"
        xmlns:local="clr-namespace:WTFWPF"
        xmlns:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"
        xmlns:sys="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow"
        Width="525"
        Height="350"
        DataContext="{DynamicResource ViewModel}"
        mc:Ignorable="d">
    <Window.Resources>
        <local:MainViewModel x:Key="ViewModel" />
        <DataTemplate DataType="{x:Type sys:Int32}">
            <TextBox Text="{Binding Path=., UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
    </Window.Resources>
    <StackPanel>
        <TextBlock Margin="5" Text="{Binding Number}" />
        <TextBox Margin="5" Text="{Binding Number, UpdateSourceTrigger=PropertyChanged}" />
        <ContentControl Margin="5" Content="{Binding Number}" />
    </StackPanel>
</Window>

2 个答案:

答案 0 :(得分:0)

这似乎工作正常,但不确定为什么你的版本不起作用。

<Window.Resources>
    <wpfApplication1:MainViewModel x:Key="ViewModel" />
        <DataTemplate x:Key="NumberTemplate">
            <TextBox Text="{Binding Path=Number, Mode=TwoWay, UpdateSourceTrigger=PropertyChanged}" />
        </DataTemplate>
</Window.Resources>
<StackPanel>
    <TextBlock Margin="5" Text="{Binding Number}" />
    <TextBox Margin="5" Text="{Binding Number, UpdateSourceTrigger=PropertyChanged}" />
    <ContentControl Margin="5"
                    Content="{Binding}"
                    ContentTemplate="{StaticResource NumberTemplate}" />
</StackPanel>

答案 1 :(得分:-1)

使其工作的另一种方法是更改​​模板中的绑定:

<TextBox Text="{Binding Path=DataContext.Number,      
               RelativeSource={RelativeSource AncestorType=ContentControl}, UpdateSourceTrigger=PropertyChanged}" />

不幸的是我无法解释为什么你的版本不起作用。