|
I have been working on this for a day or two and can't seem to find the answer on the internet, or at least I don't get the answer if I have seen it.
I have a window showing various settings for an object:
<Grid x:Name="PalletGrid">
<Grid.DataContext><XmlDataProvider x:Name="xmlPalletConfiguration" XPath="/PalletConfig/Pallets/Pallet"
Source="C:\ProgramData\Pallet Configuration.xml" />
</Grid.DataContext>
<TextBox x:Name="PickupSequenceTextBox" Text="{Binding XPath=/PalletConfig/PickupSequence}"/>
<TextBox x:Name="DropoffSequenceTextBox" Text="{Binding XPath=/PalletConfig/DropoffSequence}"/>
<ComboBox x:Name="SelectedPalletComboBox" ItemsSource="{Binding Mode=OneWay}" IsSynchronizedWithCurrentItem="True"
SelectedValuePath="@display" DisplayMemberPath="@display"/>
<TextBox x:Name="RowCount" Text="{Binding XPath=Rows}"/>
<TextBox x:Name="ColumnCount" Text="{Binding XPath=Columns}"/>
<TextBox x:Name="ColumnDimension" Text="{Binding XPath=YDimension}"/>
<TextBox x:Name="RowDimension" Text="{Binding XPath=XDimension}"/>
</Grid>
The Pallet Configuration.xml file I'm databinding to looks like this:
<PalletConfig>
<NumberOfPallets>2</NumberOfPallets>
<CurrentPallet>3/8</CurrentPallet>
<PickupSequence>B</PickupSequence>
<DropoffSequence>A</DropoffSequence>
<Pallets>
<Pallet display="6.0mm">
<Rows>10</Rows>
<Columns>10</Columns>
<XDimension>100.000</XDimension>
<YDimension>100.000</YDimension>
<PalletALocation>295, -5, -19, 0, -8, L</PalletALocation>
<PalletBLocation>93, -6, -19, 0, 0, -8, L</PalletBLocation>
</Pallet>
<!--More pallet tags ...-->
</Pallets>
</PalletConfig>
I set the datacontext for the grid to be at the individual pallet level. When I select a new pallet in the combo box, all of the textboxes below update with the values for the selected pallet.
What I can't figure out how to do is databind the <CurrentPallet> in the XML file to the selected item. I want it to save the selected item so the next time the application is ran, the combobox will select the pallet type that was last selected.
I've tried binding to the selecteditem, but haven't been successful. Nothing I have tried has updated the <CurrentPallet> tag when the changes were saved. Also, whatever I have tried made the combobox display a blank line the first one or two times you select a pallet type. It would display like it whould after that. I've also heard that the selecteditem doesn't do well with updating the combobox when whatever it is bound to changes, not that it matters I only want to do this at startup. Any solution that works will be appreciated.
Brad
Deja Moo - When you feel like you've heard the same bull before.
|
|
|
|
|
Here's how I would do it...
Grid: DataContext = /PalletConfig
- 2 TextBoxes bound to the two sequence numbers
- ComboBox: ItemSource bound as you have it now, SelectedIndex bound OneWayToSource to /PalletConfig/CurrentPallet
- Some container (Panel, groupbox, border, etc - Just to organize it) for other textboxes, DataContext bound to ComboBox.SelectedItem (ElementName binding)
-- Textboxes bound to rows, columns, dimensions
Unless the pallets will be shuffled around, storing the index seems like it should be enough, right?
|
|
|
|
|
I was hoping to bind to the name displayed (they are always unique) because the pallets can be shuffled around in the file. The users can move the <Pallet> tags so the pallets they use more often can be at the top of the list.
Brad
Deja Moo - When you feel like you've heard the same bull before.
|
|
|
|
|
Ah, that's a bit more tricky. The thing about binding is that one end of the bind MUST be a DependencyProperty on a DependencyObject. You really want to bind one field in your XML file to another, or alternately bind one property to two different values (Source1 = SelectedItem, Source2 = CurrentPallet).
I don't think you can do either, unfortunately. Your best bet might be to just hook the ComboBox's selection changed and update CurrentPallet in the code-behind. Then you can hook its DataContextChanged to initialize its SelectedItem to the CurrentPallet.
|
|
|
|
|
That's was kind of the route I had planned. It didn't make sense for the datacontext to open the file and me opening in the code-behind. Being that I'm new to databinding, I was hoping there was something easier I could do.
Thanks for your efforts.
Brad
Deja Moo - When you feel like you've heard the same bull before.
|
|
|
|
|
Data binding is great, but it does have certain limits. Binding directly to XML is pretty limited in itself, since it skips the ViewModel portion of the MVVM pattern entirely. Great for simple things, but falls short for anything that would normally require some back-end processing.
If this is going to get more complex, you might want to wrap a class around that XML... Well, two classes... One for the file itself, and one to represent a pallet.
|
|
|
|
|
I've been impressed with some of the things I see data binding do so far. I have had to jump through a couple hoops to get some things working like I wanted, but they work and work every time.
Hopefully this is as complicated as it gets. I'll keep your ideas in mind because after this project is over, I have to go back to the one that originally got me into all of this. It is going to be a lot more complicated. In fact, it will swallow this project as an option. Imagine the software that could be written if there weren't deadlines. Although, without deadlines, there's no guarantee that it would be written.
Brad
Deja Moo - When you feel like you've heard the same bull before.
|
|
|
|
|
hi guys i am working in sl4 and doing following
<toolkit:BusyIndicator x:Name="indicator" DisplayAfter="0" IsBusy="{Binding Busy,Mode=TwoWay}">
<toolkit:BusyIndicator.BusyContentTemplate>
<DataTemplate>
<StackPanel Orientation="Horizontal">
<TextBlock Text="Please Wait::::"/>
<b> <u> <Button Content="{Binding BusyText6}" Background="Aqua"/></u> </b></StackPanel>
</DataTemplate>
</toolkit:BusyIndicator.BusyContentTemplate>
and in code doing like
public UpdateReportWindow()
{
InitializeComponent();
this.DataContext = new ViewModel.SelectReportVM();
}
but button context property does not work, althoug it works fine anywhere else on my
page , is there anything i am doing wrong?
regards,
Tauseef A Khan
MCP Dotnet framework 2.0.
|
|
|
|
|
Have you created a property for BusyText6? That property should call the PropertyChanged method of INotifyPropertyChanged .
|
|
|
|
|
yes it is
Tauseef A Khan
MCP Dotnet framework 2.0.
|
|
|
|
|
Hi
I am displaying credit card no in textblock. so I am binding the textblock to show credit card no.
Now i want to mask it such a way that it only show last for digits and rest as x like
if card no is 2343324533222422
it should show as
xxxxxxxxxxxx2422
please help
Thanks in advance
|
|
|
|
|
Have a look at implementing an attached behaviour as shown here[^].
|
|
|
|
|
Hello WPF scholars,
I am working on my academic project in WPF. My datagrid shows Date along with "12:00:00 Am" under "Date" Column.
My stored procedure contains following code:
select Date,Topic,Location, StartsAt, Until from Initiator order by Date
Here, Initiator is a TABLE that has those columns. While I execute it there, it shows date only.
But, when it comes to DataTable, it shows "12:00:00 Am" also.And, to fill up the Datagrid, I used only:
dataGrid1.ItemsSource = dt.DefaultView;
So, is there any possibility to show only date in the Datagrid by using DefaultView option. Furthermore, DefaultView shows one more empty column. Is it possible to remove that empty column? Please suggest me.
Thanks in advance,
With best regards,
Prabhat.
modified on Thursday, August 12, 2010 3:03 PM
|
|
|
|
|
Try invoking DateTime.ToShortDateString() .
|
|
|
|
|
Hi
I have bind a listbox using
<ListBox x:Name="listOrders" ItemsSource="{Binding AllOrders, Mode=OneWay}">
now I have various textbolck inside listbox
now i want to bind a textblock outsite the listbox so that it points to listbox selected item text block like this
<TextBlock Text="{Binding ElementName = listOrders,Path=SelectedItem.????}" Foreground="White" VerticalAlignment="Center"/>
so what i put on SelectedItem.????
please help
|
|
|
|
|
Well, "SelectedItem" will give you the order that's selected... So what property of that order do you want to display?
|
|
|
|
|
Hoi all
How i can set the button inactive?
Thx
|
|
|
|
|
button.IsEnabled = false;
.45 ACP - because shooting twice is just silly ----- "Why don't you tie a kerosene-soaked rag around your ankles so the ants won't climb up and eat your candy ass..." - Dale Earnhardt, 1997 ----- "The staggering layers of obscenity in your statement make it a work of art on so many levels." - J. Jystad, 2001
|
|
|
|
|
Hi...
I m newly learning WPF . I m using WPF Pro 2008 book for leaning . If have any other e-book please give a URL . and give brief description of Micro soft blend expression . what is use of these . please let me know .
Thanks...
|
|
|
|
|
Microsoft Expression Blend is mainly used for easily design XAML based application. Its mainly a designer tool.
What Is Expression Blend[^]
|
|
|
|
|
|
1) At first create DomainDataContext & Entity services
2) Write bthe code in code behins of MainPage.xanl.cs
string keyPressed = "";
void ComboBoxProduct_KeyUp(object sender, KeyEventArgs e)
{
keyPressed += e.Key.ToString();
DateTime clickTime = DateTime.Now;
TimeSpan span = clickTime - lastClick;
Product product = DDSProducts.Data.Cast<Product>().Where(x => x.ProductName.ToUpper().StartsWith(keyPressed.ToUpper().ToString())).FirstOrDefault();
if (product != null && span.TotalMilliseconds < 2000)
{
ComboBoxProduct.SelectedItem = product;
lastClick = DateTime.Now;
}
else
{
keyPressed = "";
}
}
|
|
|
|
|
What's your question? What is the problem here?
|
|
|
|
|
I am working on academic project in WPF.
I got DataRow dr and Datatable Dt with 3 rows, One of them is "Date".For comparison of values in each rows I coded like:
for (int i = 0; i <= dt.Rows.Count; i++)
{
Convert.ToDateTime(dr["Date"]) == datePicker1.SelectedDate;
}
Here, i++ shows that it is unreachable. I know that I have to change somewhere and put value "i" in the code above. But I could not figure out the exact location and appropriate way to fill this. Would anyone please suggest me on this?
Thanks in advance.
|
|
|
|
|
Two problems...
1) Where are you setting "dr"? Somewhere in there, you probably want a line like dr = dt.Rows[i]
2) Rows are indexed from zero, so if you have 5 rows, their indices are 0, 1, 2, 3, 4. Your 'for' loop is going to count from 0 to 5 (0, 1, 2, 3, 4, 5)... You need make one tiny change to your stop condition
|
|
|
|