C# .NET
Framework 4.0 (WPF - MVVM)
In my MVVM WPF
application, I want to resize a bitmap image with values stored in app.config. Therefore,
for doing this I’ve tried to bind the Image.Height property and the BitmapImage.DecodePixelHeight directly to my ViewModel,
like in this way:
In
app.config
<?xml version="1.0" encoding="utf-8"?>
<configuration>
<appSettings>
<add key="DocumentsToBeFiledImageHeight" value="240"/>
<add key="DocumentsToBeFiledImageDecodePixelHeight" value="240"/>
</appSettings>
</configuration>
Then in my
ViewModel I’ve added these properties
private int _documentsToBeFiledImageDecodePixelHeight;
public int
DocumentsToBeFiledImageDecodePixelHeight
{
get { return _documentsToBeFiledImageDecodePixelHeight; }
set
{
if (value !=
_documentsToBeFiledImageDecodePixelHeight)
{
_documentsToBeFiledImageDecodePixelHeight
= value;
RaisePropertyChanged(DocumentsToBeFiledImageDecodePixelHeightPropertyName);
}
}
}
private double _documentsToBeFiledImageHeight;
public double DocumentsToBeFiledImageHeight
{
get { return _documentsToBeFiledImageHeight; }
set
{
if (value !=
_documentsToBeFiledImageHeight)
{
_documentsToBeFiledImageHeight = value;
RaisePropertyChanged(DocumentsToBeFiledImageHeightPropertyName);
}
}
}
and this
code
DocumentsToBeFiledImageHeight = Convert.ToDouble(ConfigurationManager.AppSettings["DocumentsToBeFiledImageHeight"]);
DocumentsToBeFiledImageDecodePixelHeight = Convert.ToInt32(ConfigurationManager.AppSettings["DocumentsToBeFiledImageDecodePixelHeight"]);
Then in the XAML
I’ve added this code
<Image Grid.Row="0" Height="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.DocumentsToBeFiledImageHeight, UpdateSourceTrigger=PropertyChanged}">
<Image.Source>
<BitmapImage DecodePixelHeight="{Binding RelativeSource={RelativeSource FindAncestor, AncestorType={x:Type Window}}, Path=DataContext.DocumentsToBeFiledImageDecodePixelHeight, UpdateSourceTrigger=PropertyChanged}"
UriSource="{Binding Path=FullName}" />
</Image.Source>
</Image>
Unfortunately
it doesn’t work, it seems that the DecodePixelHeight property is not set correctly.
Therefore,
I’ve tried to recover the value directly from app.config. I’ve added
these parameters in the user setting section in my app.config file
<userSettings>
<Agest.AO.Client.Properties.Settings>
<setting name="DocumentsToBeFiledImageDecodePixelHeight" serializeAs="String">
<value>240</value>
</setting>
<setting name="DocumentsToBeFiledImageHeight" serializeAs="String">
<value>240</value>
</setting>
</Agest.AO.Client.Properties.Settings>
</userSettings>
and I’ve
changed the XAML code in this way
xmlns:localme="clr-namespace:Agest.AO.Client.Properties"
<Image Grid.Row="0" Height="{Binding Source={x:Static localme:Settings.Default}, Path=DocumentsToBeFiledImageHeight, Mode=OneWay}">
<Image.Source>
<BitmapImage DecodePixelHeight="{Binding Source={x:Static localme:Settings.Default}, Path=DocumentsToBeFiledImageDecodePixelHeight, Mode=OneWay}"
UriSource="{Binding Path=FullName}" />
</Image.Source>
</Image>
Now it
works and I’m able to set values directly in the configuration file.
Regards!
Nessun commento:
Posta un commento