我有一个问题。如何将变量从ViewModel动态绑定到View?现在,它甚至没有显示。如果我不使用Command,它的效果很好(但是,当然,我只能绑定一次图像)。
我的视图:
namespace somestuff.View
{
public partial class WindowView : Window
{
public WindowView()
{
this.DataContext = new WindowViewModel();
InitializeComponent();
}
}
}
我的 View.Xaml (缩短):
<Image Source="{Binding DisplayedImage}"/>
<Button Command="{Binding NewImageCommand}"/>
还有我的 ViewModel:
public WindowViewModel()
{
_canExecute = true;
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged(string propertyName)
{
PropertyChanged?.Invoke(this, new PropertyChangedEventArgs(propertyName));
}
public string DisplayedImage //displaying image
{
get { return filepath; }
set { filepath = value; NotifyPropertyChanged(nameof(filepath)); }
}
public string filepath { get; set; } //var for binding
private bool _canExecute;
private ICommand _newImageCommand; //command for button
public ICommand NewImageCommand
{
get
{
return _newImageCommand ?? (_newImageCommand = new Commands.CommandHandler(() => GetImage(), _canExecute));
}
}
public void GetImage() { filepath = Pictures.GetNewImage(); } //command on button click
您能告诉我,为什么在按钮上触发命令GetImage()
后,单击绑定在Image
上的图像没有更改?如果我将filepath = Pictures.GetNewImage();
从命令中移开(更清楚的是,我不使用命令),一切都很好,但是我无法重新调用绑定到我的图像。您能告诉我如何从View模型动态地将属性绑定到View吗?当变量的值(在这种情况下是文件路径)的值更改时,我也想更改View控件。
谢谢您的建议。
编辑:
我有6个Image
标签。我这样显示图像:
public BitmapImage DisplayedHighPerformanceImage
{
get { return kMMHP; }
set { kMMHP = value; NotifyPropertyChanged(nameof(kMMHP)); }
}
所以我需要filepath
来初始化6个不同的位图。然后,我要处理这些位图(例如kMMHP
),所以我想显示从kMMHP
图像初始化的每个新位图。
kMMHP = method1(); //displaying it
//other stuff do with diffrent bmps
kMMHP = method2(); //displaying it after second method with changed values
答案 0 :(得分:1)
NotifyPropertyChanged必须使用属性的名称而不是其支持字段的名称来调用。为了触发更改通知事件,您必须设置属性,而不是后备字段:
public BitmapImage DisplayedHighPerformanceImage
{
get { return kMMHP; }
set { kMMHP = value; NotifyPropertyChanged(nameof(DisplayedHighPerformanceImage)); }
}
DisplayedHighPerformanceImage = method1();