Как заголовок указывает, что мне нужно прочитать родительское значение при выборе значений зависимостей. Загружая символы в коллекцию, мне также нужно добавить значение «CategoryDescription» для каждого символа.Linq xElement read - Мне нужно прочитать родительское значение при чтении вложенных зависимостей
Код, который я использую для чтения данных символа, но я не могу понять, как добавить значение «Категория». Я не хочу добавлять его в качестве другого элемента в Symbol, если я могу ему помочь.
Спасибо, Джим
private void UserCategories_OnSelectionChanged(object sender, SelectionChangedEventArgs e)
{
//
if (e.AddedItems.Count <= 0) return;
_userSymbolEntries.Clear();
var categorySet = UserCategories.SelectedItem.ToString();
var categx = XElement.Load(catLoadLocation);
var catResults = categx.Descendants("Category")
.Descendants("CategoryDescription")
//.Where(ee => ee.Value == categorySet)
.Select(ee => ee.Parent)
.Descendants("Symbol")
.Select(ee => new
{
xDescription = ee.Descendants("Description").FirstOrDefault().Value,
xFontFamily = ee.Descendants("FontFamily").FirstOrDefault().Value,
xUnicodeValue = ee.Descendants("UnicodeValue").FirstOrDefault().Value,
xText = (ee.Descendants("UnicodeValue").FirstOrDefault().Value).ToString(),
xState = ee.Descendants("UserSymbolState").FirstOrDefault().Value
});
var i = 0;
foreach (var catResult in catResults)
{
var use = new UserSymbolEntry {Description = catResult.xDescription};
TypeConverter tc = TypeDescriptor.GetConverter(typeof(FontFamily));
use.FontFamily = (FontFamily)tc.ConvertFromString(catResult.xFontFamily);
use.UnicodeValue = catResult.xUnicodeValue;
var x = "0x" + catResult.xUnicodeValue; // 0x0041; ((char) x).ToString();
var y = Convert.ToInt32(x, 16);
switch (catResult.xState)
{
case "Normal":
use.UserSymbolState = UserSymbolState.Normal;
break;
case "Added":
use.UserSymbolState = UserSymbolState.Added;
break;
case "Deleted":
use.UserSymbolState = UserSymbolState.Deleted;
break;
}
use.Text = ((char)y).ToString();
use.Id = i++;
if (catResult.xFontFamily == categorySet)
_userSymbolEntries.Add(use);
}
}
XML-выглядит следующим образом
<?xml version="1.0" encoding="utf-8" ?>
<CMCategories>
<Category>
<Name>Test</Name>
<CategoryDescription>FontFamily Change</CategoryDescription>
<Symbol>
<Description>A</Description>
<FontFamily>Courier New</FontFamily>
<UnicodeValue>0041</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>A</Description>
<FontFamily>Vani</FontFamily>
<UnicodeValue>0041</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>A</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>0041</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
</Category>
<Category>
<Name>Arrows</Name>
<CategoryDescription>Various Arrows</CategoryDescription>
<Symbol>
<Description>Left Arrow</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>2190</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Up Arrow</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>2191</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Right Arrow</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>2192</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Down Arrow</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>2193</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
</Category>
<Category>
<Name>MiscTech</Name>
<CategoryDescription>Miscellaneous Technical</CategoryDescription>
<Symbol>
<Description>Double Right</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>23E9</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Double Left</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>23EA</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Double Up</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>23EB</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
<Symbol>
<Description>Double Down</Description>
<FontFamily>Segoe UI Symbol</FontFamily>
<UnicodeValue>23EC</UnicodeValue>
<UserSymbolState>Normal</UserSymbolState>
</Symbol>
</Category>
</CMCategories>
Большое спасибо jdweng, что даст мне то, что мне нужно. Просто немного дополнительного рефакторинга в следующем коде, чтобы сделать это сейчас. :) – Jim