2017-03-15 6 views
1

作品MVVMパターンで)私のプロパティは私のビューモデルでは決して呼び出されませんでした。もし私が "Path ="というコンバーターだけを使用していればコンバータは動作しますが、ImageSource(BitmapImage、ImageSource、..など)用のオブジェクトタイプを追加するとコンバータは呼び出されないため、コンバーターで静的ImageSourceを使用する必要があります。 (私はPropertyChanged値でUpdateSourceTriggerを使用しようとしましたが、このソリューションは私には役に立ちませんでした。)これは私の背景を正しく設定する唯一の方法であるため、コンバータは望ましくないソリューションです。私はバインディングに任意のパスを追加する場合コンバータは残念なことにコンバータは動作しません。ここで背景画像データはなく、私の窓のXAML内

はViewModelに内部の私の財産です:

private ImageSource _imageSource; 
    public ImageSource ImageSource 
    { 
     get 
     { 
      return _imageSource; 
     } 
     set 
     { 
      _imageSource = value; 
      OnPropertyChanged(); 
     } 
    } 

正しくMVVMパターンとし、使用するURIパスなしでブラー効果と私の背景画像を設定するための任意のアイデア? (イメージを物理ストレージに保存したくない)

+0

私のグリッドのDataContextは、私のウィンドウのDataContextと同じです。私はこのグリッドに異なるdatacontextを設定しませんでした。このウィンドウの他の機能は、データバインディングで正しく機能しています。私はコンバータに何も渡すことはできません。私は任意のパスを設定すると、コンバータは呼び出されません。これが私のイメージを表示するために静的なImageResourceを使わなければならない理由です。 –

答えて

1

VisualBrushは要素ツリーの一部ではないため、GridDataContextを継承しません。

Imageをリソースとして定義し、そのSourceプロパティを{x:Reference}を使用して親ウィンドウのプロパティにバインドすることができます。これは動作するはずです:

<Window x:Class="WpfApplication1.MainWindow" 
     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:local="clr-namespace:WpfApplication1" 
     mc:Ignorable="d" 
     Title="MainWindow" Height="300" Width="300" x:Name="win"> 
    <Window.Resources> 
     <local:imgconverter x:Key="imgconverter" /> 
    </Window.Resources> 
    <Grid> 
     <Grid.Resources> 
      <Image x:Key="img" Source="{Binding Path=DataContext.ImageSource,Converter={StaticResource imgconverter}, Source={x:Reference win}}"> 
       <Image.BitmapEffect> 
        <BlurBitmapEffect KernelType="Box" /> 
       </Image.BitmapEffect> 
      </Image> 
     </Grid.Resources> 
     <Grid.Style> 
      <Style TargetType="{x:Type Grid}"> 
       <Setter Property="Background"> 
        <Setter.Value> 
         <VisualBrush Visual="{StaticResource img}" /> 
        </Setter.Value> 
       </Setter> 
      </Style> 
     </Grid.Style> 
     <TextBlock Text="..." /> 
    </Grid> 
</Window> 
+0

あなたのソリューションを私のビューxamlにコピーしましたが、結果は同じ問題(コンバーターの有無にかかわらず)です。ビューモデルでは、ImageSourceプロパティは値を持ちますが、ビューからは決して呼び出さず、パス値を追加するとコンバータは呼び出されません。 –

+0

ImageSourceプロパティがウィンドウのDataContext(ビューモデル)に属する場合、DataContext.ImageSourceへのバインディングのパスを変更する必要があります。私は私の答えを編集しました。 – mm8

+0

これはあなたの最後の変更で動作します!私はこの問題のために2日を落としました。 (そして今コンバータは冗長ですので、viewmodelプロパティから動作します:))ありがとうございました! –