ليستفيو البيانات ملزمة ويندوز 8.1 مخزن التطبيقات
-
20-12-2019 - |
سؤال
لذلك أنا أحاول نقل برنامج سطح المكتب أدليت به إلى التطبيق ل Windows 8.1
باستخدام Visual Studio 2013
. Datagrid
تم إهمالها لهذا الإصدار لذلك أحاول ترجمة تلك إلى ListView
.لقد استخدمت سابقا ListViews
في تطبيقات سطح المكتب الأخرى ، ولكن يبدو أن الكثير قد تغير.المشكلة أواجه هو ملء بلدي ListView
من قاعدة البيانات الخاصة بي.أنا على اتصال من خلال WCF Service
و يخطو من خلال رمز ، أستطيع أن أرى أنا الحصول على البيانات الصحيحة ، أنا فقط غير قادر على الحصول عليها لتظهر في ليستفيو.بلدي النتيجة النهائية المفضلة ستكون 'ليستفيو' مع 3 أعمدة من المعلومات التي سوف تكون قابلة للتحرير.سابقا أود أن استخدام ListView.View
ثم وضع GridView
هناك للأعمدة.ولكن يبدو ListView.View
تم إهماله تماما مثل GridView.Columns
.
هنا هو بلدي زمل ل ListView
<ListView x:Name="lvInventory" Grid.Row="2" Style="{StaticResource listViewStyle}" ItemsSource="{Binding}">
<ListView.ItemTemplate>
<DataTemplate>
<Grid Height="200" Width="200">
<Grid.ColumnDefinitions>
<ColumnDefinition Width="*" />
<ColumnDefinition Width="*"/>
<ColumnDefinition Width="*"/>
</Grid.ColumnDefinitions>
<TextBlock x:Name="tbName" Text="{Binding InventoryName}" Width="200" Foreground="#FF0E0D0D" />
<TextBox x:Name="tbQty" Grid.Column="1"/>
<TextBox x:Name="tbType" Grid.Column="2"/>
</Grid>
</DataTemplate>
</ListView.ItemTemplate>
</ListView>
في بلدي كودبيهيند أنا تعيين إيتمسورس من ليستفيو.
VMInventory inventory = new VMInventory();
inventory.GetList();
lvInventory.ItemsSource = inventory;
VMInventory
هو بلدي ViewModel
حيث أنا الحصول على البيانات الخاصة بي من WCF service
وهذا يبدو وكأنه:
public async Task GetList()
{
this.connection = new InventoryModelEntities(new Uri(url));
var filteredList = from o in connection.Inventory
where o.Have == false
select o;
var query = await Task.Factory.FromAsync((filteredList as DataServiceQuery).BeginExecute(null, null),
(result) => (filteredList as DataServiceQuery).EndExecute(result)) as IEnumerable<Aurora.InventoryService.Inventory>;
this.inventoryList = query.ToList();
this.currentItem = 0;
this.onPropertyChanged("Current");
this.IsAtStart = true;
this.IsAtEnd = (inventoryList.Count == 0);
}
ملاحظة جانبية أخيرة ، تمكنت من إضافة مربع نص إلى Grid
وعندما DataBind
إلى text="{Binding Current.InventoryName}"
أنا قادر على ربطه بنجاح.
المحلول
إذا فهمت بشكل صحيح واجهة المستخدم الخاصة بك لا يتم تحديث مع القيم ما من أي وقت مضى إضافة الخاص بك في فيوموديل ، ولكن إذا قمت بإضافة بعض القيمة في واجهة المستخدم فإنه يعكس في فيوموديل.
إذا كان هذا هو الحال ، واستخدام أوبسيرابليكولكتيون بدلا من القائمة ، وإذا كان لديك إنشاء قائمة في كل مرة ، ثم لديك لتنفيذ إينوتيفيبروبيرتيشانجد في فيوموديل الخاص بك.
إذا كنت قد فعلت كل هذا ولكن لا يزال لا يتم تحديث ثم ، إنشاء القائمة في مهمة آسي ، وهي ليست موضوع واجهة المستخدم.إذا كنت تريد تحديث واجهة مستخدم من مؤشر ترابط غير واجهة المستخدم ، فاستخدم تحديث واجهة المستخدم باستخدام المرسل.يمكنك العثور على الكثير من الأمثلة لتحديث واجهة المستخدم من مؤشر ترابط غير واجهة المستخدم باستخدام المرسل