WPF data templates
        Posted  
        
            by imekon
        on Stack Overflow
        
        See other posts from Stack Overflow
        
            or by imekon
        
        
        
        Published on 2010-04-24T07:32:33Z
        Indexed on 
            2010/04/24
            7:43 UTC
        
        
        Read the original article
        Hit count: 305
        
I'm getting started with WPF and trying to get my head around connecting data to the UI. I've managed to connect to a class without any issues, but what I really want to do is connect to a property of the main window.
Here's the XAML:
<Window x:Class="test3.MainWindow"
    xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
    xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
    xmlns:custom="clr-namespace:test3"
    Title="MainWindow" Height="350" Width="525">
<Window.Resources>
    <CollectionViewSource
        Source="{Binding Source={x:Static Application.Current}, Path=Platforms}"
        x:Key="platforms"/>
    <DataTemplate DataType="{x:Type custom:Platform}">
        <StackPanel>
            <CheckBox IsChecked="{Binding Path=Selected}"/>
            <TextBlock Text="{Binding Path=Name}"/>
        </StackPanel>
    </DataTemplate>
</Window.Resources>
<Grid>
    <ListBox ItemsSource="{Binding Source={StaticResource platforms}}"/>
</Grid>
Here's the code for the main window:
public partial class MainWindow : Window
{
    ObservableCollection<Platform> m_platforms;
    public MainWindow()
    {
        m_platforms = new ObservableCollection<Platform>();
        m_platforms.Add(new Platform("PC"));
        InitializeComponent();
    }
    public ObservableCollection<Platform> Platforms
    {
        get { return m_platforms; }
        set { m_platforms = value; }
    }
}
Here's the Platform class:
public class Platform
{
    private string m_name;
    private bool m_selected;
    public Platform(string name)
    {
        m_name = name;
        m_selected = false;
    }
    public string Name
    {
        get { return m_name; }
        set { m_name = value; }
    }
    public bool Selected
    {
        get { return m_selected; }
        set { m_selected = value; }
    }
}
This all compiles and runs fine but the list box displays with nothing in it. If I put a breakpoint on the get method of Platforms, it doesn't get called. I don't understand as Platforms is what the XAML should be connecting to!
© Stack Overflow or respective owner