Проблема привязки данных в ContentTemplate элемента TabControl - PullRequest
1 голос
/ 18 августа 2010

У меня проблема с привязкой данных шаблона содержимого 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>

А также я устанавливаю dataContext в code-behinf mainWindow.xaml

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 ]

2 голосов
/ 18 августа 2010

Привязка содержимого табуляции к свойствам Text1, Text2, Text3

затем в части TextBlock свяжите текст следующим образом

Text={Binding}

поэтому код будет таким

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

это должно работать

0 голосов
/ 18 августа 2010

Я изменил ваш xaml и ViewModel на то, что должно работать

ViewModel: Когда свойство установлено, необходимо вызвать NotifyPropertyChanged. Я добавил 1 пример свойства, сделайте это со всеми 3

    public string Text1
    {
        get
        {
            return _text1;
        }
        set
        {
            _text1 = value;
            NotifyPropertyChanged("Text1");
        }
    }

XAML:

Изменить привязку данных на:

 Text="{Binding Path=Text1}"

После этих изменений должно работать.

...