2013-03-23 71 views
0

之一,我有一個數據觸發器這樣定義的:視圖模型的對象綁定 - 如何通知UI時,其性能變化

<DataTrigger Binding="{Binding Path=DataContext.MyObject.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False"> 
    <Setter Property="IsEnabled" Value="False" /> 
</DataTrigger> 

myObject的是在視圖模型。現在,當MyObject的MyProperty更改時,它不會通知UI,即使MyProperty通知OnPropertyChange。當我們使用Microsoft Prism作爲框架時,對象MyObject向容器註冊。

我該如何得到這個工作?

編輯: myObject的定義是這樣的:

public class MyObject : INotifyPropertyChanged 
{ 
    public event PropertyChangedEventHandler PropertyChanged; 

    [NotifyPropertyChangedInvocator] 
    protected virtual void OnPropertyChanged(string propertyName) 
    { 
     var handler = PropertyChanged; 
     if (handler != null) handler(this, new PropertyChangedEventArgs(propertyName)); 
    } 

    private bool _myProperty; 
    public bool MyProperty 
    { 
     get { return _myProperty; } 
     set 
     { 
      if (value == _myProperty) 
       return; 

      _myProperty = value; 
      OnPropertyChanged("MyProperty"); 
     } 
    } 
} 
+0

發佈「MyObject」的定義 - 很難只用觸發就診斷很多。 – JerKimball 2013-03-23 03:04:02

+0

完成,我所做的是MyProperty得到頻繁填充,它應該更新UI上的狀態 – Shankar 2013-03-23 03:12:41

+0

嗯......沒有東西跳出......爲什麼'Mode = OneWay'上的觸發器綁定?哦,你看到在附帶調試器的輸出窗口中有任何綁定錯誤嗎? – JerKimball 2013-03-23 03:14:43

回答

0

我看不出有什麼「錯誤」與你發佈的代碼 - 你是絕對肯定要更改的屬性值,並做任何需要調用回適當的Dispatcher

你可以試試這個結構嗎? (胡亂猜測,不知道它會適合您的上下文中)

[編輯:我是從內存怎麼回事,所以語法需要扭捏]

<Trigger Property="{Binding Path=DataContext.MyObject.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False"> 
    <Setter Property="IsEnabled" Value="False" /> 
</Trigger> 
+0

不可以,不起作用! – Shankar 2013-03-23 05:09:38

0

你確定RelativeSource作品不明確的FindAncestor?嘗試改變

RelativeSource={RelativeSource AncestorType=UserControl}}"

到:

RelativeSource={RelativeSource FindAncestor, AncestorType=UserControl}}"

+0

儘管我會說它更好地顯式和狀態Mode = FindAncestor,比默認的希望,根據http://stackoverflow.com/questions/84278/how-do-i-use-wpf-bindings-with-它的相關來源應該仍然沒有工作。 – Viv 2013-03-23 06:22:57

+0

然後我想你將不得不給我們一些更多的上下文,我不知道,發佈完整的UserControl XAML,並順便說一句,爲什麼你的'OnPropertyChanged'標記了'[NotifyPropertyChangedInvocator]'屬性? – 2013-03-23 06:32:08

0

如果DataContext設置爲MyObject實例 - 那麼你只是想DataContext.MyProperty - 除非你的DataContext確實有一個叫MyObject屬性這也是一個實例MyObject

DataContext.MyProperty(DataContext是爲MyObject的實例已)

VS

DataContext.MyObject.MyProperty(請問您的DataContext對象(視圖模型)確實有一個叫MyObject的類型MyObject的財產)

?例如:

<DataTrigger Binding="{Binding Path=DataContext.MyProperty, Mode=OneWay, RelativeSource={RelativeSource AncestorType=UserControl}}" Value="False"> 
    <Setter Property="IsEnabled" Value="False" /> 
</DataTrigger> 

如果我你是否可以發佈ViewModel的代碼 - 即設置爲DataContext的代碼

相關問題