Есть несколько вещей, которые нужно исправить:
Во-первых, рекомендуется установка MainViewModel
экземпляр как DataContext страницы. Пожалуйста, не устанавливайте ViewModel как Image
элементов управления DataContext
и не связывайте ViewModel
как StaticResource
. Вы можете установить его в XAML, как показано ниже:
<Page.DataContext>
<vm:MainPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
Или вы можете установить его на код-за:
MainPageViewModel ViewModel=new MainPageViewModel();
public MainPage()
{
this.InitializeComponent();
this.DataContext = ViewModel;
}
Во-вторых, Image.Source имеет тип ImageSource
.Для установки этого свойства требуется экземпляр BitmapImage
или WriteableBitmap
. Таким образом, Original
объект должен быть изменен с Image
на BitMapImage
или WriteableBitmap
. Вы можете использовать следующие коды для преобразования StorageFile
в WriteableBitmap
:
IRandomAccessStream randomStream=await file.OpenAsync(Windows.Storage.FileAccessMode.Read);
WriteableBitmap bitmap = new WriteableBitmap(500, 500);
bitmap.SetSource(randomStream);
В-третьих, как сказал @Anthony Russel. MVVM lib может понадобиться знать свойствоName вашего свойства.
Update: Ваш класс ViewModel должны быть похожи, как это:
public class MainPageViewModel : INotifyPropertyChanged
{
public event PropertyChangedEventHandler PropertyChanged;
public WriteableBitmap _original;
public WriteableBitmap Original
{
get { return this._original; }
set
{
this._original = value;
RaisePropertyChanged("Original");
}
}
public MainPageViewModel()
{ }
public MainPageViewModel(WriteableBitmap original)
{
this.Original = original;
}
private void RaisePropertyChanged(string propertyName)
{
if (PropertyChanged != null)
{
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
}
И Xaml:
<Page.DataContext>
<vm:MainPageViewModel x:Name="ViewModel"/>
</Page.DataContext>
<Grid Background="{ThemeResource ApplicationPageBackgroundThemeBrush}">
<StackPanel VerticalAlignment="Center">
<Image Source="{Binding Original}"
x:Name="OriginalImg"
></Image>
<Button Name="myBtn" Click="myBtn_Click" >Click Me</Button>
</StackPanel>
</Grid>
, где и как определяется OriginalImage? – Alex
Я обновил свой вопрос – SmiLe