user5193795
user5193795

Reputation: 13

Data binding to the output of a method

I'm trying to display the output of a method in a WPF TextBox. I'm just trying a simple attempt, to print a single string 3 in a TextBox.

I'm trying to do it the following way, using an ObjectDataProvider:

<Window x:Class="WpfApplication1.MainWindow"
        xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
        xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
        xmlns:local="clr-namespace:WpfApplication1"
        xmlns:system="clr-namespace:System;assembly=mscorlib"
        Title="MainWindow" Height="350" Width="525">
    <Window.Resources>

        <ObjectDataProvider x:Key="dataprovider" ObjectType="{x:Type system:String}" MethodName="GetValue">

        </ObjectDataProvider>
    </Window.Resources>
    <Grid>

        <TextBox Text="{Binding Source={StaticResource dataprovider}, Mode=OneWay}" HorizontalAlignment="Left" Height="23" Margin="201,168,0,0" TextWrapping="Wrap"  VerticalAlignment="Top" Width="120"/>

    </Grid>
</Window>

And here's my code behind:

namespace WpfApplication1
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        public string GetValue()
        {
            return "3";
        }
    }
}

I'm getting no output. the TextBox is just blank. Where am I going wrong?

Upvotes: 1

Views: 326

Answers (1)

Salah Akbari
Salah Akbari

Reputation: 39956

Instead of ObjectDataProvider create a property like this:

public string GetMethod
{
     get
     {
         return GetValue();
     }
}

And:

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

Then in the XAML remove ObjectDataProvider and just:

<TextBox Text="{Binding GetMethod, Mode=OneWay}" HorizontalAlignment="Left" 
         Height="23" Margin="201,168,0,0" TextWrapping="Wrap" 
         VerticalAlignment="Top" Width="120"/>

Upvotes: 3

Related Questions