2012-12-16 26 views
1

我有例如屬性是這樣的:如何阻止分配價值二傳手在WPF

private string foobar; 

    public string Foobar 
    { 
     get 
     { 
      return this.foobar; 
     } 

     set 
     { 
      if (value != this.foobar) 
      { 
       // here I want to check if value is correct 
       if(value != something) 
       { 
        this.foobar = value; 
        this.NotifyPropertyChanged("Foobar"); 
       } 
       else 
       { 
        value = null; 
        this.foobar = null; 
        this.NotifyPropertyChanged("Foobar"); 
       } 
      } 
     } 
    } 

物業綁定(MVVM)到列表視圖: SelectedItem="{Binding Foobar, UpdateSourceTrigger=PropertyChanged, Mode=TwoWay}

而當用戶更改列表中的值時,selecteditem被更改並且setter中的值被設置。我的代碼是好的,當用戶選擇不正確的值,賦值和foobar null分配。但在WPF中仍然顯示選定的值。當我在getter中設置斷點時,我可以看到它也返回null。如何刷新WPF清除在ListView中選定的值?它應該像開始時一樣空虛。

感謝

+0

因此它適用於普通值,但不適用於'null'? – JGaarsdal

+0

不適用於任何 – Robert

回答

1

與您的代碼的問題是,你想改變你的setter方法結合分配的值。這不起作用,因爲控制不會更新下一個屬性更改,原因很簡單,它通過設置屬性來調用它。要對你的值進行驗證,請嘗試使用this構建機制。

+0

我明天嘗試這個 – Robert

0

我寧願使用IDataErrorInfo並且不使用屬性設置器邏輯。主要優勢在於您的視圖模型和視圖中的屬性值始終相同,並且您的視圖模型具有值可以或不可以的信息。

+0

當用戶從列表SelectedItem中選擇位置時,然後檢查是否(se​​lectedItem!= something)... selectedItem必須爲null,並且必須將其設置爲setter將selectedItem。對不起,但我不知道如何在這種情況下使用IDataErrorInfo – Robert

+0

我這樣做的另一種方式。如果用戶設置selecteditem == somthingwrong - 我的idataerror說那不行。如果你有一個savecommand或類似的東西,你可以檢查你的錯誤屬性,如果有任何錯誤。在我的方式selecteditem可以是錯的東西,但多數民衆贊成,因爲idataerrorinfo說這是一個錯誤。 – blindmeis

+0

我沒有保存命令,我只想讓selecteditem再次爲空,當用戶選擇錯誤的值時。 – Robert