2013-12-22 66 views
0

我有我想要遷移到使用的最佳實踐,在這種情況下MVVM的UI。我遇到了一些我不確定如何以最佳方式處理的事情。結合動態創建WPF UI對象的MVVM模式

用戶界面是命令與上面一些過濾的選項列表 - 訂單來源和日期。來源是訂單來自哪裏,即。電話,易趣,亞馬遜等,這些都在數據庫中定義。

用於選擇源的過濾器UI是一組功能區切換按鈕,一個用於每個源 - 這樣用戶可以選擇的源的任意組合和訂單的列表將顯示從所選來源只訂單。這是從數據庫建立起來,像這樣:

<Custom:RibbonGroup Header="Sources" ItemsSource="{Binding Sources}"> 
    <Custom:RibbonGroup.ItemTemplate> 
     <DataTemplate DataType="{x:Type Data:OrderSource}"> 
      <Custom:RibbonToggleButton Label="{Binding Name}" /> 
     </DataTemplate> 
    </Custom:RibbonGroup.ItemTemplate> 
</Custom:RibbonGroup> 

(「源」是OrderSource對象的一個​​ObservableCollection,從數據庫加載。)

我的「模式」的過濾器控制與對象各種過濾器選項性質,即:

public class OrdersFilter 
{ 
    public List<int> SourceIds { get; set; } 
    public DateTime FromDate { get; set; } 
    public DateTime ToDate { get; set; } 
} 

過濾器然後在到訂單庫GetOrders方法通過:

public IEnumerable<Order> GetOrders(OrdersFilter filter) 
{ 
    return this.context.Orders.Where(order => filter.SourceIds.Contains(order.SourceId) && order.Date >= filter.FromDate && order.Date < filter.ToDate); 
} 

其結果綁定到ViewModel上的訂單列表上的ObservableCollection。

現在,這是它變得棘手。 ViewModel和日期的綁定非常簡單 - 只是綁定到DatePickers的SelectedDateTime屬性的幾個DateTime屬性。

我甚至不知道從哪裏開始的模式在UI一堆動態生成的切換按鈕綁定ID的列表,但!

我要對這個在完全錯誤的方式?還是有一個簡單的解決方案呢?

+0

你想選擇在UI IDS? – Tony

回答

0

最簡單的方法是創建OrderSource,如OrderSourceViewModel一個新的視圖模型對象,將含有「IsUserInterested」布爾屬性。

之後,您將其綁定在ToggleButton上。

<Custom:RibbonToggleButton Label="{Binding Name}" IsChecked="{Binding IsUserInterested}" /> 

現在,您可能需要創建一個新的按鈕,「應用」將被從數據庫中獲取必要的命令,像這樣:

orders = GetOrders(new OrdersFilter{ 
             SourceIds = OrderSources 
             .Where(x => x.IsUserInterested) 
             .Select(x => x.Id)});