Telerik Forums
UI for WPF Forum
3 answers
624 views
Hello all,
I am trying to create a configuration window that binds to an external XML file and implements two way binding in XAML. I have basically used the RadGridView demo as a starting point and have started to modify my code to implement the the two way binding piece, however I have hit a road block.

First off I am wondering whether I should use a DependencyObject or implement INotifiedProperty. At this point I am using a DependencyObject, however my textboxes do not appear to bind to the data, but the RadGridView does.

Basically I want to use the RadGridView as a list box on steroids and use the textboxes to edit/add records. However since this is an external xml file I am bit confused on what direction to take. Also I am using a ObservableCollection as my datasource, just as you do in the RadGridView demo, but I have also played around with using a XMLDataProvider. Any suggestions here?

Below are the basic classes I have so far.

Thanks for your help!

XAML
<telerikNavigation:RadWindow x:Class="VistaAdmin.Configuration.Presentation.ConfigurationView" 
    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:mc="http://schemas.openxmlformats.org/markup-compatibility/2006"   
    xmlns:telerikSchema="http://schemas.telerik.com/2008/xaml/presentation" 
    xmlns:v="clr-namespace:VistaAdmin.Configuration.Presentation" 
    xmlns:p="clr-namespace:VistaAdmin.Configuration.Properties" 
    xmlns:db="clr-namespace:VistaAdmin.Configuration.Models" 
    xmlns:telerikGrid="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.GridView" 
    xmlns:telerikNavigation="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Navigation" 
    xmlns:telerikRibbonBar="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.RibbonBar" 
    xmlns:telerikInput="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls.Input" 
    xmlns:telerik="clr-namespace:Telerik.Windows.Controls;assembly=Telerik.Windows.Controls" 
    xmlns:xamlHelpers="clr-namespace:VistaAdmin.Configuration.Domain" 
    Header="{Binding HeaderInfo}"   
    mc:Ignorable="d" Height="420" Width="695" WindowStartupLocation="CenterOwner"   
    FontFamily="Calbri" ResizeMode="NoResize" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}">  
    <telerikNavigation:RadWindow.Resources> 
        <!--<XmlDataProvider Source="DataSources\Environments.xml" x:Key="xmlData" XPath="/EnvironmentList" />--> 
        <db:XmlDataSource x:Key="xmlData" Source="Environments.xml"/>  
    </telerikNavigation:RadWindow.Resources> 
    <StackPanel>         
        <telerikNavigation:RadToolBar telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}">  
                <Button x:Name="configSaveButton" ToolTip="{x:Static p:Resources.Save}" Command="{Binding SaveConfigCommand}">  
                    <Image Source="../Resources/save.png" Width="16" Height="16"/>  
                </Button> 
                <Button x:Name="configValidateButton" ToolTip="{x:Static p:Resources.Validate}" Command="{Binding DBValidateCommand}">  
                    <Image Source="../Resources/db.png" Width="16" Height="16"/>  
                </Button> 
            </telerikNavigation:RadToolBar> 
        <Grid Height="Auto" > 
            <Grid.ColumnDefinitions> 
                <ColumnDefinition Width="250" MinWidth="180" /> 
                <ColumnDefinition Width="Auto" MinWidth="40" /> 
                <ColumnDefinition Width="*" MinWidth="180"/>  
            </Grid.ColumnDefinitions> 
            <Grid Grid.Column="0">  
                <Grid.RowDefinitions> 
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                    <RowDefinition MinHeight="25"/>  
                </Grid.RowDefinitions> 
                <Label x:Name="labelName" Grid.Row="0" Margin="5,0,5,0">  
                    <TextBlock Text="Environment Name:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <TextBox Grid.Row="1" x:Name="textName" Margin="5,0,5,0" Text="{Binding Path=Name, Mode=TwoWay}" /> 
                <Label x:Name="labelServerName" Grid.Row="2" Margin="5,0,5,0">  
                    <TextBlock Text="DB Server Name:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <TextBox Grid.Row="3" x:Name="textServerName" Margin="5,0,5,0" Text="{Binding Path=Servername, Mode=TwoWay}"/>  
                <Label x:Name="labelUserName" Grid.Row="4" Margin="5,0,5,0">  
                    <TextBlock Text="User Name:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <TextBox Grid.Row="5" x:Name="textUserName" Margin="5,0,5,0" Text="{Binding Path=Username, Mode=TwoWay}"/>  
                <Label x:Name="labelPassword" Grid.Row="6" Margin="5,0,5,0">  
                    <TextBlock Text="Password:" TextWrapping="Wrap" HorizontalAlignment="Left" Foreground="Black" /> 
                </Label> 
                <PasswordBox Grid.Row="7" Margin="5,0,5,0" Name="textPassword" PasswordChar="*" 
                        xamlHelpers:PasswordBoxAssistant.BindPassword="true" 
                        xamlHelpers:PasswordBoxAssistant.BoundPassword="{Binding Path=Password, Mode=TwoWay}"/>  
                <Label x:Name="labelDBName" Grid.Row="8" Margin="5,0,5,0">  
                    <TextBlock Text="DB Name:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <TextBox Grid.Row="9" x:Name="textDBName" Margin="5,0,5,0" Text="{Binding Path=Databasename, Mode=TwoWay}"/>  
                <Label x:Name="labelServerType" Grid.Row="10" Margin="5,0,5,0">  
                    <TextBlock Text="DB Server Type:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <StackPanel Grid.Row="11" Orientation="Horizontal" Margin="5,0,5,0" HorizontalAlignment="Center" > 
                    <telerik:RadRadioButton Width="80" Height="22"  Margin="0 0 15 0" 
                                        HorizontalContentAlignment="Center" VerticalContentAlignment="Center" IsChecked="True"   
                                        telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}" > 
                        <telerik:RadRadioButton.Content> 
                            <StackPanel Orientation="Horizontal" Margin="4 0">  
                                <TextBlock Text="SQL" Foreground="#2b2b2d" FontSize="12"/>  
                            </StackPanel> 
                        </telerik:RadRadioButton.Content> 
                    </telerik:RadRadioButton> 
                    <telerik:RadRadioButton Width="80" Height="22" HorizontalContentAlignment="Center" VerticalContentAlignment="Center" 
                                            telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}">  
                        <telerik:RadRadioButton.Content> 
                            <StackPanel Orientation="Horizontal" Margin="4 0">  
                                <TextBlock Text="Oracle"   Foreground="#2b2b2d" FontSize="12"/>  
                            </StackPanel> 
                        </telerik:RadRadioButton.Content> 
                    </telerik:RadRadioButton> 
                </StackPanel> 
                <Label x:Name="labelRootPath" Grid.Row="12" Margin="5,0,5,0">  
                    <TextBlock Text="Root Path:" TextWrapping="Wrap" Foreground="Black" /> 
                </Label> 
                <StackPanel Grid.Row="13" Margin="5,0,5,0" Orientation="Horizontal">  
                    <TextBox x:Name="textPath" HorizontalAlignment="Left" Margin="0,0,5,0" Width="210" Text="{Binding Path=RootPath, Mode=TwoWay}"/>  
                    <telerik:RadButton Width="25" HorizontalAlignment="Right" Command="{Binding BrowseCommand}" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}">  
                        <telerik:RadButton.Content> 
                            <TextBlock Text="..." /> 
                        </telerik:RadButton.Content> 
                    </telerik:RadButton> 
                </StackPanel> 
            </Grid> 
            <Grid Grid.Column="1">  
                <StackPanel VerticalAlignment="Center" Margin="5,0,5,0">  
                    <telerik:RadButton Width="85" Height="22" HorizontalContentAlignment="Left" VerticalContentAlignment="Center"   
                                       telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}" Command="{Binding AddCommand}">  
                        <telerik:RadButton.Content> 
                            <StackPanel Orientation="Horizontal" Margin="4,0,0,0" VerticalAlignment="Center">  
                                <Image Source="../Resources/Add.png" Width="16" Height="16" /> 
                                <TextBlock Text="Add" Foreground="#2b2b2d" FontSize="12" Margin="9 0 0 0"/>  
                            </StackPanel> 
                        </telerik:RadButton.Content> 
                    </telerik:RadButton> 
                    <telerik:RadButton Width="85" Height="22" HorizontalContentAlignment="Left" VerticalContentAlignment="Center" Margin="0,5,0,0" Command="{Binding RemoveCommand}" 
                                       telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}">  
                        <telerik:RadButton.Content> 
                            <StackPanel Orientation="Horizontal" Margin="4,0,0,0" VerticalAlignment="Center">  
                                <Image Source="../Resources/Delete.png" Width="16" Height="16" /> 
                                <TextBlock Text="Remove" Foreground="#2b2b2d" FontSize="12" Margin="9 0"/>  
                            </StackPanel> 
                        </telerik:RadButton.Content> 
                    </telerik:RadButton> 
                </StackPanel> 
            </Grid> 
            <telerikGrid:RadGridView Grid.Column="2" Height="Auto" Name="gridEnvironments" Width="Auto" ItemsSource="{Binding Source={StaticResource xmlData}}" telerik:StyleManager.Theme="{Binding Source={StaticResource settings}, Path=Default.Theme}"/>  
        </Grid> 
    </StackPanel> 
</telerikNavigation:RadWindow> 
 

Dependency Object
using System;  
using System.Collections.Generic;  
using System.Linq;  
using System.Text;  
using System.Xml;  
using System.Windows;  
using System.Xml.Serialization;  
 
namespace VistaAdmin.Configuration.Models  
{  
    public class Environment : DependencyObject    
    {
        #region DependencyProperties  
            public static readonly DependencyProperty ServernameProperty =   
                DependencyProperty.Register("Servername"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty NameProperty =   
                DependencyProperty.Register("Name"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty DatabasenameProperty =   
                DependencyProperty.Register("Databasename"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty UsernameProperty =   
                DependencyProperty.Register("Username"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty PasswordProperty =   
                DependencyProperty.Register("Password"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty ServerTypeProperty =   
                DependencyProperty.Register("ServerType"typeof(String), typeof(Environment));  
            public static readonly DependencyProperty RootPathProperty =   
                DependencyProperty.Register("RootPath"typeof(String), typeof(Environment));
        #endregion  
 
        #region IEnvironment Members  
 
        [XmlAttribute(AttributeName = "Servername")]  
        public string Servername  
        {  
            get {return (string)GetValue(ServernameProperty);}  
            set {SetValue(ServernameProperty,value);}             
        }  
 
        [XmlAttribute(AttributeName = "Name")]          
        public string Name  
        {  
            get {return (string)GetValue(NameProperty);}  
            set {SetValue(NameProperty,value);}                   
        }  
 
        [XmlAttribute(AttributeName = "Databasename")]  
        public string Databasename  
        {  
             get {return (string)GetValue(DatabasenameProperty);}  
            set {SetValue(DatabasenameProperty,value);}      
        }  
 
        [XmlAttribute(AttributeName = "Username")]  
        public string Username  
        {  
             get {return (string)GetValue(UsernameProperty);}  
            set {SetValue(UsernameProperty,value);}        
        }  
 
        [XmlAttribute(AttributeName = "Password")]  
        public string Password  
        {  
             get {return (string)GetValue(PasswordProperty);}  
            set {SetValue(PasswordProperty,value);}        
        }  
 
        [XmlAttribute(AttributeName = "ServerType")]  
        public string ServerType  
        {  
             get {return (string)GetValue(ServerTypeProperty);}  
            set {SetValue(ServerTypeProperty,value);}        
        }  
 
        [XmlAttribute(AttributeName = "RootPath")]  
        public string RootPath  
        {  
             get {return (string)GetValue(RootPathProperty);}  
            set {SetValue(RootPathProperty,value);}        
        }
        #endregion         
    }  

Observable Collection
using System;  
using System.Collections.Generic;  
using System.Collections.ObjectModel;  
using System.Linq;  
using System.Text;  
using System.Xml;  
using System.Xml.Serialization;  
 
namespace VistaAdmin.Configuration.Models  
{  
    [XmlRoot(ElementName = "EnvironmentList")]  
    public class EnvironmentsList : ObservableCollection<Environment>  
    {  
        public void AddRange(IEnumerable<Environment> range)  
        {  
            foreach (Environment node in range)  
            {  
                this.Add(node);  
            }  
        }  
 
        //public void Add(Environment node)  
        //{  
        //        this.Add(node);  
        //}  
    }  

Datasource
using System;  
using System.Reflection;  
using System.Collections.Generic;  
using System.Collections.ObjectModel;  
using System.Linq;  
using System.Text;  
using System.Xml;  
using System.Xml.Serialization;  
using System.Xml.XPath;  
using System.IO;  
using System.Windows.Data;  
using System.ComponentModel;  
using Microsoft.Practices.EnterpriseLibrary.Logging;  
 
namespace VistaAdmin.Configuration.Models  
{  
    public class XmlDataSource : EnvironmentsList  
    {  
        private string source;  
          
        public string Source  
        {  
            get 
            {  
                return this.source;  
            }  
            set 
            {  
                try 
                {  
                    Assembly executingAssembly = Assembly.GetExecutingAssembly();  
                    string xmlFile = Path.GetDirectoryName(executingAssembly.Location) + @"\DataSources\" + value;  
                    this.source = xmlFile;  
 
                    AddRange(RetrieveData(File.Open(xmlFile, FileMode.Open)));  
                }  
                catch (Exception ex)  
                {  
                    Log("Error occured retrieving data:" + ex.Message, System.Diagnostics.TraceEventType.Error);                      
                }  
            }  
        }  
 
        private EnvironmentsList RetrieveData(Stream xmlStream)  
        {  
            XmlSerializer serializer = new XmlSerializer(typeof(EnvironmentsList));  
            StreamReader reader = new StreamReader(xmlStream);  
            EnvironmentsList list = (EnvironmentsList)serializer.Deserialize(reader);  
            return list;  
        }  
 
        private static void Log(string message, System.Diagnostics.TraceEventType severity)  
        {  
            LogEntry entry = new LogEntry();  
            entry.Severity = severity;  
            entry.Message = message;  
            entry.Title = "VistaAdminConfiguration";  
            entry.Categories.Add("Configuration");  
            Logger.Write(entry);  
        }  
 
        public static void SaveData(Environment environment)  
        {  
            try 
            {  
                Assembly executingAssembly = Assembly.GetExecutingAssembly();  
                string xmlFile = Path.GetDirectoryName(executingAssembly.Location) + @"\DataSources\Environments.xml";  
                  
                XmlSerializer serializer = new XmlSerializer(typeof(EnvironmentsList));  
                StreamWriter writer = new StreamWriter(xmlFile);  
                serializer.Serialize(writer, environment);  
            }  
            catch (Exception ex)  
            {  
                Log("Error trying to save Enviroment: " + ex.Message, System.Diagnostics.TraceEventType.Error);  
            }  
        }  
    }  

External XML File
<?xml version="1.0" encoding="utf-8" ?> 
<EnvironmentList> 
  <Environment Name="Environment Name" Servername="Server" Username="sa" Password="!@#!@$!@%#" Databasename="DatabaseName" ServerType="SQL" RootPath="C:\Temp"/>    
</EnvironmentList> 
Tsvyatko
Telerik team
 answered on 16 Mar 2010
1 answer
135 views
Hi,
Does anyone know why Click Handler on the button does not work when the button is within RadBook control, while mousedoubleclick handler works ok.
Also the Expander control does not respond to click when the control is in the book.
Thanks in advance
Kiril Stanoev
Telerik team
 answered on 16 Mar 2010
4 answers
290 views
Hello,

I have table with a XML-Column (XElement). I would like to format the cell according to the specified XML-Data, so I was looking for a GridViewDataColumn.CellTemplateSelector but I did not found one.

Do you have an easy way to get this behaviour?

I have several DataTemplates for the XMLs which I want to use.

I was trying to style the GridViewCell and set the ContentControl.ContentTemplateSelector but this was not recognized by the RadGridView.

Do I have any other oportunities ?

Benedict
Benedict
Top achievements
Rank 1
 answered on 16 Mar 2010
1 answer
141 views
Hello,

I am using the GridView in my application. If I group the rows with a specific column, all the rows are grouped by that column and displayed accordingly. I want to get the group name on expand/collapse of a particular group. I am able to achieve this on expand by using the rowloaded event. But when I collapse the same group it is not firing. Can you tell me how can I achieve  this.

Thanks
Vlad
Telerik team
 answered on 16 Mar 2010
3 answers
175 views
I have following problem: i have a grid with several rows. Several user can edit the content at the same time. To avoid problems with saving data, rows which are currently editing have to be locked.
What i have until now, is a column with the username who is editing the row. If there is no editing, the cell has no value.
What I want: the style of currently editing rows should differ from the other rows e.g. font-style should be italic und light-gray. And the user should not have the possibility to select this row. Please help!
Thx
Milan
Telerik team
 answered on 16 Mar 2010
1 answer
70 views
Hi,
a simple question
Just wondering is there a way to hide a column ?

Thanks
Kristjan.
Vlad
Telerik team
 answered on 16 Mar 2010
5 answers
214 views
Hai

am using the  wpf rad grid view.

when i select the row in the grid view, i need to display selected row values(each cell value in the selected row) in some other view..

how to do this. can u provide some example to how get the values from selected row?

am using the below one to get the selected row value. but  i cant get the values.. how to get???

rGridView.SelectedItem = rGridView.Items[rGridView.Items.Count - 1];

dCODE
Top achievements
Rank 1
 answered on 16 Mar 2010
2 answers
333 views
Hello again to all users of the forum.
I need your support, now I find that, I am using RadCarousel control, which contains various Usercontrol about 5, so my XAML code is as follows:
  
<telerik:RadCarousel x:Name="RadCarousel1"  > 
        <local:usercontro1></local:usercontro1> 
        <local:usercontro2></local:usercontro2> 
        <local:usercontro3></local:usercontro3> 
        <local:usercontro4></local:usercontro4> 
        <local:usercontro5></local:usercontro5> 
</telerik:RadCarousel> 
Now when I run my application at the carousel screen shows nothing, but if I navigate with the buttons on the display begins to move the carousel elements.

What I can not do. is to show the first element of my carousel, a suggestion.
xola139
Top achievements
Rank 1
 answered on 16 Mar 2010
4 answers
91 views
How do I get the data that I have placed into a gridView back out in the same fashion that I put it in.  I'm having a tough time with creating interactions with the grid view because I have to use some very complicated reflection techniques to retrieve the data objects based on their selection. 

In short, after I have said myGridView.itemsSource = myOriginalDataCollection<myOriginalDataObject>

How do I get from myGridView.ItemsSelected to myOriginalDataObject.allMyUntouchableAttributes?

Thanks
James Grise
Scenario VPD
SoftwareEngineer
James Grise
Top achievements
Rank 1
 answered on 15 Mar 2010
4 answers
507 views
Hi,
I am a beginner and I have a problem with RadgridView control. I have two separate RadGridView control (master-detail). Namely, when the master table is positioned on the record that has no children, the detail still shows data from previous records.
I use VS2010 RC and Trial Teleric controls for WPF.
Operating system: Windows 7 Ultimate Edition
Nebojsa
Top achievements
Rank 1
 answered on 15 Mar 2010
Narrow your results
Selected tags
Tags
GridView
General Discussions
Chart
RichTextBox
Docking
ScheduleView
ChartView
TreeView
Diagram
Map
ComboBox
TreeListView
Window
RibbonView and RibbonWindow
PropertyGrid
DragAndDrop
TabControl
TileView
Carousel
DataForm
PDFViewer
MaskedInput (Numeric, DateTime, Text, Currency)
AutoCompleteBox
DatePicker
Buttons
ListBox
GanttView
PivotGrid
Spreadsheet
Gauges
NumericUpDown
PanelBar
DateTimePicker
DataFilter
Menu
ContextMenu
TimeLine
Calendar
Installer and Visual Studio Extensions
ImageEditor
BusyIndicator
Expander
Slider
TileList
DataPager
PersistenceFramework
Styling
TimeBar
OutlookBar
TransitionControl
FileDialogs
Book
ToolBar
ColorPicker
TimePicker
MultiColumnComboBox
SyntaxEditor
VirtualGrid
Wizard
ExpressionEditor
NavigationView (Hamburger Menu)
WatermarkTextBox
DesktopAlert
BarCode
SpellChecker
DataServiceDataSource
EntityFrameworkDataSource
RadialMenu
ChartView3D
Data Virtualization
BreadCrumb
LayoutControl
ProgressBar
Sparkline
TabbedWindow
ToolTip
CloudUpload
ColorEditor
TreeMap and PivotMap
EntityFrameworkCoreDataSource (.Net Core)
HeatMap
Chat (Conversational UI)
VirtualizingWrapPanel
Calculator
NotifyIcon
TaskBoard
TimeSpanPicker
BulletGraph
Licensing
WebCam
CardView
DataBar
FilePathPicker
PasswordBox
SplashScreen
Callout
Rating
Accessibility
CollectionNavigator
Localization
AutoSuggestBox
Security
VirtualKeyboard
HighlightTextBlock
TouchManager
StepProgressBar
Badge
OfficeNavigationBar
ExpressionParser
CircularProgressBar
SvgImage
PipsPager
SlideView
AI Coding Assistant
+? more
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Top users last month
Chester
Top achievements
Rank 1
Iron
Simon
Top achievements
Rank 1
Iron
Douglas
Top achievements
Rank 2
Iron
Iron
SUNIL
Top achievements
Rank 3
Iron
Iron
Iron
Marco
Top achievements
Rank 3
Iron
Iron
Iron
Want to show your ninja superpower to fellow developers?
Want to show your ninja superpower to fellow developers?