也許愚蠢的問題,但我不知道了......WPF綁定圖片來源
我ViewModel類是這樣的:
public class MainWindowsViewModel : INotifyPropertyChanged
{
private ImageSource _img;
public ImageSource StatusImage
{
get { return _img; }
set
{
_img = value;
NotifyPropertyChanged();
}
}
public event PropertyChangedEventHandler PropertyChanged;
private void NotifyPropertyChanged([CallerMemberName]String propertyName = "")
{
if (PropertyChanged != null)
PropertyChanged(this, new PropertyChangedEventArgs(propertyName));
}
}
在XAML綁定是這樣的:
<Window.DataContext>
<VM:MainWindowsViewModel />
</Window.DataContext>
<Image x:Name="gui_image_status" HorizontalAlignment="Left" Height="26" Margin="144,10,0,0" VerticalAlignment="Top" Width="29" Source="{Binding Path=StatusImage}" />
我這樣設置的ImageSource的內容:
MainWindowsViewModel _view = new MainWindowsViewModel();
var yourImage = new BitmapImage(new Uri(String.Format("Sources/{0}.png", "red"), UriKind.Relative));
_view.StatusImage = yourImage;
但它不起作用。我認爲那個問題在於NotifyPropertyChanged
,因爲我在set
和get
中試過了制動點。 Get
在開始時觸發了幾次,然後set
以正確的ImageSource觸發,但之後get
沒有再觸發。就像沒有發生過任何設定。
這真的是簡單的約束,我已經做了很多次類似的......我不知道爲什麼這次不工作。
我認爲這只是一個例子,但不是真正的代碼。我希望。 –
你的意思是這個問題?這確實是真實的代碼,也是一個常見的錯誤。我在StackOverflow上經常看到這一點。 – Clemens
應該像'Application.Current.MainWindow.DataContext'一樣工作,但最好不要在XAML中創建視圖模型實例,而是在您的代碼後面創建一個全局可訪問的實例,即在App類中。 – Clemens