Reputation: 101
EditingModel.cs:
private ObservableCollection<string> color;
public ObservableCollection<string> Color
{
get { return color; }
set
{
color = value;
NotifyPropertyChanged("Color");
}
}
private ObservableCollection<string> shapes;
public ObservableCollection<string> Shapes
{
get { return shapes; }
set
{
shapes = value;
NotifyPropertyChanged("Shapes");
}
}
private ObservableCollection<string> size;
public ObservableCollection<string> Size
{
get { return size; }
set
{
size = value;
NotifyPropertyChanged("Size");
}
}
EditingsViewModel.cs:
private string selectedcolor;
public string SelectedColor
{
get { return selectedcolor; }
set
{
if (value != selectedcolor)
{
selectedcolor = value; NotifyPropertyChanged("SelectedColor");
}
}
}
private string selectedshapes;
public string SelectedShapes
{
get { return selectedshapes; }
set
{
if (value != selectedshapes)
{
selectedshapes = value; NotifyPropertyChanged("SelectedShapes");
}
}
}
private string selectedsize;
public string SelectedSize
{
get { return selectedsize; }
set
{
if (value != selectedsize)
{
selectedsize = value; NotifyPropertyChanged("SelectedSize");
}
}
}
XML document: (name of the xml doc is EditingsValue.xml)
<?xml version="1.0" encoding="utf-8"?>
<!DOCTYPE MYEDITINGS[]>
<MYEDITINGS>
<Group name="GeneralEditings">
<EditingsName name="COLOR" value="red"/>
<EditingsName name="SHAPES" value="circle"/>
<EditingsName name="SIZE" value="medium"/>
<EditingsName name="FILE PATH" value="C:\ProgramFiles"/>
</Group>
</MYEDITINGS>
EditingsView.xaml:
<ComboBox SelectedValue="{Binding SelectedColor,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding Color}"/ >
<ComboBox SelectedValue="{Binding SelectedShapes,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding Shapes}"/ >
<ComboBox SelectedValue="{Binding SelectedSize,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding Size}" />
<TextBox Height="26" Grid.Column="3" IsReadOnly="True" TextAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center" Width="150" Text="{Binding ElementName=Mygroups, Path=DataContext.FolderPath,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />
<Button KeyboardNavigation.TabIndex="2" Grid.Column="4" Content="Browse" Height="29" VerticalAlignment="Bottom" MinWidth="45" Command="{Binding ElementName=Mygeoups,Path=DataContext.FolderCommand}" CommandParameter="{Binding}" />
In my above code,I'm setting default value for my combo box using SelectedIndex,and then allowing the users to select their own value. Then I'm writing the selected values of user in XML document as mentioned above. Upto this everything is working fine. But now my requirement is, if I open my application again,I should not get the default values in the combo boxes and textboxes, instead I should read the xml document and display the values of that in my combo boxes and textboxes.
How to achieve this using MVVM (wpf). Can any one help me out.
Thanks in advance.
Upvotes: 2
Views: 103
Reputation: 445
I think, this one help to you
For the EditingsViewModel.cs Constructor Read the Xml File, Assign the Values to Model
public EditingsViewModel()
{
ComboBoxModel = new EditingModel();
//Xml Path
string xmlpath = @"D:\MyDocument.xml";
var doc = new XmlDocument();
doc.Load(xmlpath);
XmlNode colorNode = doc.SelectSingleNode(@"/MYEDITINGS/Group/EditingsName[@name = 'COLOR']/@value");
XmlNode shapesNode = doc.SelectSingleNode(@"/MYEDITINGS/Group/EditingsName[@name = 'SHAPES']/@value");
XmlNode sizeNode = doc.SelectSingleNode(@"/MYEDITINGS/Group/EditingsName[@name = 'SIZE']/@value");
XmlNode filePathNode = doc.SelectSingleNode(@"/MYEDITINGS/Group/EditingsName[@name = 'FILE PATH']/@value");
//Binding the Color to the Color Property
var observableColors = new System.Collections.ObjectModel.ObservableCollection<string>() { "red","yellow","green"};
ComboBoxModel.Color = observableColors;
//Binding the Shapes to the Shape Property
var observableShapes = new System.Collections.ObjectModel.ObservableCollection<string>() { "circle", "Triangle", "Rectangle" };
ComboBoxModel.Shapes = observableShapes;
//Binding the Size to the Size Property
var observableSize = new System.Collections.ObjectModel.ObservableCollection<string>() { "medium", "high", "low" };
ComboBoxModel.Size = observableSize;
//Assign the Color Default vlaue from the Xml Document
SelectedColor = colorNode.Value;
//Assign the Shape Default vlaue from the Xml Document
SelectedShapes = shapesNode.Value;
//Assign the Size Default vlaue from the Xml Document
SelectedSize = sizeNode.Value;
//Assign the FilePath Default vlaue from the Xml Document
FolderPath = filePathNode.Value;
}
EditingsView.xaml - Remove the Selected Index Property
<ComboBox SelectedValue="{Binding SelectedColor,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding ComboBoxModel.Color}"/>
<ComboBox SelectedValue="{Binding SelectedShapes,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding ComboBoxModel.Shapes}"/>
<ComboBox SelectedValue="{Binding SelectedSize,Mode=TwoWay}" Height="25" Width="150" HorizontalContentAlignment="Right" VerticalAlignment="Center" ItemsSource="{Binding ComboBoxModel.Size}" />
<TextBox Name="Mygroups" Height="26" Grid.Column="3" IsReadOnly="True" TextAlignment="Right" VerticalContentAlignment="Center" HorizontalAlignment="Left" VerticalAlignment="Center" Width="150" Text="{Binding ElementName=Mygroups, Path=DataContext.FolderPath,UpdateSourceTrigger=PropertyChanged,Mode=TwoWay}" />
<Button KeyboardNavigation.TabIndex="2" Grid.Column="4" Content="Browse" Height="29" VerticalAlignment="Bottom" MinWidth="45" Command="{Binding ElementName=Mygeoups,Path=DataContext.FolderCommand}" CommandParameter="{Binding}" />
Upvotes: 1