DataConinding问题在TabControl的ContentTemplate中

时间:2010-08-18 08:11:52

标签: wpf data-binding mvvm

我遇到了tabControl的内容模板的数据绑定问题。

我有那个班级

public class MainWindowViewModel : INotifyPropertyChanged
    {
        string _text1 = "text1";
        string _text2 = "text2";
        string _text3 = "text3";

        public string Text1 
        {
            get
            {
                return _text1;
            }
            set
            {
                _text1 = value;
            }
        }

        public string Text2
        {
            get
            {
                return _text2;
            }
            set
            {
                _text2 = value;
            }
        }

        public string Text3
        {
            get
            {
                return _text3;
            }
            set
            {
                _text3 = value;
            }
        }

        public event PropertyChangedEventHandler PropertyChanged;

        private void NotifyPropertyChanged(String propertyName)
        {
            if (PropertyChanged != null)
            {
                PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
            }
        }
    }

我有那个xaml:

<Window x:Class="LazyBindingTabControl.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:LazyBindingTabControl"
        Title="MainWindow" Height="350" Width="525">
    <Grid>
        <TabControl Height="299" Margin="0,12,0,0" Name="tabControl1" VerticalAlignment="Top">
            <TabItem Header="tabItem1" Name="tabItem1">
                <TabItem.ContentTemplate>
                    <DataTemplate>
                        <TextBlock Name="Text1" Text="{Binding Path=DataContext.Text1}" />
                    </DataTemplate>
                </TabItem.ContentTemplate>
            </TabItem>
            <TabItem Header="tabItem2" Name="tabItem2">
                <TabItem.ContentTemplate>
                    <DataTemplate>
                        <TextBlock Name="Text2" Text="{Binding Path=DataContext.Text2}" />
                    </DataTemplate>
                </TabItem.ContentTemplate>
            </TabItem>
            <TabItem Header="tabItem3" Name="tabItem3">
                <TabItem.ContentTemplate>
                    <DataTemplate>
                        <TextBlock Name="Text3" Text="{Binding Path=DataContext.Text3}" />
                    </DataTemplate>
                </TabItem.ContentTemplate>
            </TabItem>
        </TabControl>
    </Grid>
</Window>

我还在mainWindow.xaml的代码behinf中设置了dataContext

namespace LazyBindingTabControl
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
            this.DataContext = new MainWindowViewModel();
        }
    }
}

但绑定并不成功。如何正确地成功绑定Text1,Text2和Text3属性。

感谢。

2 个答案:

答案 0 :(得分:2)

将tabitem内容绑定到Text1,Text2,Text3属性

然后在TextBlock部分中,像这样绑定Text

Text={Binding}

所以代码就像这样

   <TabItem Header="tabItem1" Name="tabItem1" Content="{Binding Text1}">
      <TabItem.ContentTemplate>
        <DataTemplate>
          <TextBlock Name="Text1" Text="{Binding}" />
        </DataTemplate>
      </TabItem.ContentTemplate>
    </TabItem>

应该有效

答案 1 :(得分:0)

我将您的xaml和ViewModel更改为应该工作的内容

视图模型: 设置属性后,必须调用NotifyPropertyChanged。我添加了1个属性的示例,使用所有3

执行此操作
    public string Text1
    {
        get
        {
            return _text1;
        }
        set
        {
            _text1 = value;
            NotifyPropertyChanged("Text1");
        }
    }

XAML:

将数据绑定更改为:

 Text="{Binding Path=Text1}"

完成这些更改后,它应该可以正常工作。