私はmvvmが初めてで、学ぼうとしています。だから私は新しいプロジェクトと学習を作成しますが、チェックボックスでSilverlightに問題があります(2日を費やします)わかりません、Silverlight mvvmでチェックボックスをバインドする方法。
私のxamlファイルには
<sdk:DataGrid x:Name="List_ServicessProcess" AutoGenerateColumns="False">
<sdk:DataGrid.Columns>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Summary[0].Total}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn>
<sdk:DataGridTemplateColumn.CellTemplate>
<DataTemplate>
<TextBlock Text="{Binding Summary[0].Total}" />
</DataTemplate>
</sdk:DataGridTemplateColumn.CellTemplate>
</sdk:DataGridTemplateColumn>
</sdk:DataGrid.Columns>
</sdk:DataGrid>
私のC#コードでは:
public class SaleData
{
public int Categoryid { get; set; }
public string Category { get; set; }
public List<YearSummary> Summary { get; set; }
}
public class YearSummary
{
public int Year { get; set; }
public double Total { get; set; }
public List<OnWarehouse> Warehouse { get; set; }
}
public class OnWarehouse
{
public bool yes { get; set; }
}
public partial class MainPage : UserControl
{
public MainPage()
{
InitializeComponent();
var data = GetData();
List_ServicessProcess.ItemsSource = data;
var firstRow = data.First();
for (int i = 0; i < firstRow.Summary.Count; i++)
{
var monthlySummary = firstRow.Summary[i];
List_ServicessProcess.Columns.Add(CreateColumn(i, monthlySummary.Year.ToString()));
}
}
public static List<SaleData> GetData()
{
List<SaleData> data = new List<SaleData>();
data.Add(new SaleData() { Category = "Laptop Toshiba xyz", Summary = GetSummaryData() });
data.Add(new SaleData() { Category = "Laptop Toshiba xyz", Summary = GetSummaryData() });
data.Add(new SaleData() { Category = "Laptop Toshiba yzx", Summary = GetSummaryData() });
data.Add(new SaleData() { Category = "Laptop Toshiba yzx", Summary = GetSummaryData() });
data.Add(new SaleData() { Category = "Laptop Toshiba yzx", Summary = GetSummaryData() });
return data;
}
private static List<YearSummary> GetSummaryData()
{
List<YearSummary> data = new List<YearSummary>();
Random rnd = new Random();
for (int i = 0; i < 5; i++)
{
var summary = new YearSummary() { Total = rnd.Next(-5000, 10000), Year = 2008 + i, Warehouse = GetWarehouse() };
data.Add(summary);
}
return data;
}
private static List<OnWarehouse> GetWarehouse()
{
List<OnWarehouse> data = new List<OnWarehouse>();
Random rnd = new Random();
for (int i = 0; i < 4; i++)
{
var summary = new OnWarehouse() { yes = (i % 2 == 0)};
data.Add(summary);
}
return data;
}
private DataGridTemplateColumn CreateColumn(int index, string header)
{
string cellTemp = string.Format(@"<DataTemplate xmlns=""http://schemas.microsoft.com/winfx/2006/xaml/presentation""
xmlns:x=""http://schemas.microsoft.com/winfx/2006/xaml"">
<CheckBox IsChecked=""{{Binding Path=Warehouse[{0}].yes,Mode=TwoWay}}""/>
</DataTemplate>", index);
DataGridTemplateColumn column = new DataGridTemplateColumn();
column.Header = header;
column.CellTemplate = (DataTemplate)XamlReader.Load(cellTemp);
return column;
}
}
シンプルなプロジェクトを開始するとき、チェックボックスはチェックされていません。
最終的に結果:
助けはありますか?ありがとう。ジェイコブス