2012-05-31 53 views
0

我們正在WPF應用程序中實現MVVM架構。我們想使用Infragistics XamDataGrid,但是在視圖模型圖層上實現選擇已更改的事件失去了一些。Infragistics XamDataGrid WPF MVVM SelectionChanged

任何幫助將不勝感激。

我們迫切需要一個解決方案!

Anshuman Chakravarty Humana公司公司

回答

2

我已經解決了上述問題。我以非常簡單的方式做到了。

  1. 將XamGrid的ActiveCell屬性綁定到VM中的對象類型屬性。
  2. 在屬性的setter中,調用一個方法並傳遞該對象。
  3. 在該方法內部,將對象投射到Infragictics.Windows.Cell類型變量。
  4. 使用Infragistics.Windows.Cell對象的Record.Index查找選定的索引。
  5. 使用該索引,查找從綁定了xamdatagrid的原始集合/數據源中選擇的行。

簡單但有效!

+0

這個工作,但現在你的ViewModel耦合到而不是其他方式。如果你想改變你的控制庫到另一個第三方庫,甚至你自己的自定義控件,你必須改變ViewModel,這正是你不應該做的... – aaronburro

+0

嗨亞倫,謝謝你您的評論,但我不認爲我的虛擬機與V耦合。該對象不知道它來自哪裏,從那裏開始,我正在虛擬機的集合處進行處理,並且與無關。風景。實際上,視圖與我的虛擬機連接到我上面提到的屬性! – Anshuman

+4

如果我正確理解你,你的ViewModel中有一個屬性綁定到視圖。當視圖上的活動單元格更改時,它會在ViewModel中調用setter。該制定者轉換爲Infragistics.Windows.Cell類型。現在,將視圖更改爲使用SyncFusion網格。你的ViewModel會繼續工作嗎?如果不是,那麼它與視圖耦合。 – aaronburro

-2

我從來沒有用過,你問的是數據網格,但你可以打賭,它的工作原理同一切。

在ViewModel中,您將視圖綁定到將會有一個名爲SelectedItem的屬性或某種特效。

public object SelectedItem 
{ 
    get { return (object)GetValue(SelectedItemProperty); } 
    set { SetValue(SelectedItemProperty, value); } 
} 

// Using a DependencyProperty as the backing store for SelectedItem. This enables animation, styling, binding, etc... 
public static readonly DependencyProperty SelectedItemProperty = 
    DependencyProperty.Register("SelectedItem", typeof(object), typeof(ownerclass), new UIPropertyMetadata(0)); 

在xaml中,您可能會將網格Selected屬性綁定到該依賴屬性。

<XamDataGrid ItemsSource={Binding Items} SelectedItem={Binding SelectedItem, UpdateSourceTrigger=PropertyChanged} /> 
+0

嗨安迪,謝謝期待你的答覆。但是這看起來更像綁定SelectedItem屬性。我已經實現了。我需要爲SelectionChange實現指令(事件處理委派)。這是不工作在這個XAMDataGrid – Anshuman

+0

嗨安迪,當我嘗試創建DependencyProperty並在XAMDataGrid中使用它時,我得到以下錯誤: 錯誤屬性'SelectedItem'不存在於XML命名空間'http:/ /infragistics.com/DataPresenter」。 94行位置27. – Anshuman

+0

xamDataGrid不包含SelectedItem屬性 – PiotrWolkowski

2

這裏是一些xamdatagrid的其他活動。

SelectedItemsChanged 
SelectedItemsChanging 

RecordActivating 
RecordActivated 

這些可能會幫助你。

+0

感謝答覆Jodha。但是,這些事件對xaml文件後面的代碼工作正常。我想在視圖模型層實現事件處理程序。任何一個有附加行爲的例子? – Anshuman

+0

看看這個http://community.infragistics.com/cfs-file.ashx/__key/CommunityServer.Components.PostAttachments/00.00.23.52.90/XamDataGrid_5F00_Behaviors.zip – JSJ

0

如果您希望能夠使用MVVM綁定選定的項目,那麼我會建議使用一種行爲來完成此操作。 Devin Rader編寫了一個blog post,其中介紹了視圖模型和用戶界面之間的同步值,您可以使用類似的東西來知道選擇在視圖模型中發生了何種變化。

讓我知道你是否對此事有任何疑問。

1

對於Infragistic v11.2 XamlDataGrid具有名爲的屬性ActiveDataItem,它們表示綁定到該行的當前數據項。

你可以做的是在你的ViewModel中創建屬性,並將其綁定到XamlDataGrid的ActiveDataItem,如下所示,並觀察下面的更改。

<igDataPresenter:XamDataGrid ActiveDataItem="{Binding ActiveItem, Mode=TwoWay}" > 

我的情況: 我想解僱我的DataItem命令綁定到單個網格行對各行的DoubleClick,下面XAML代碼工作對我來說,

 <igDataPresenter:XamDataGrid x:Name="DemoGrid" 
        DataSource="{Binding Path=Items, Mode=OneWay}" 
     > 
     <i:Interaction.Triggers> 
     <i:EventTrigger EventName="MouseDoubleClick"> 
      <i:InvokeCommandAction Command="{Binding RelativeSource={RelativeSource AncestorType=igDataPresenter:XamDataGrid}, Path=ActiveDataItem.ViewCommand}"></i:InvokeCommandAction> 

     </i:EventTrigger> 
     </i:Interaction.Triggers> 
相關問題